Symbol: pgpath
drivers/md/dm-mpath.c
1030
struct pgpath *pgpath;
drivers/md/dm-mpath.c
1042
pgpath = parse_path(&path_args, &pg->ps, ti);
drivers/md/dm-mpath.c
1043
if (IS_ERR(pgpath)) {
drivers/md/dm-mpath.c
1044
r = PTR_ERR(pgpath);
drivers/md/dm-mpath.c
1048
pgpath->pg = pg;
drivers/md/dm-mpath.c
1049
list_add_tail(&pgpath->list, &pg->pgpaths);
drivers/md/dm-mpath.c
111
struct pgpath *pgpath;
drivers/md/dm-mpath.c
116
typedef int (*action_fn) (struct pgpath *pgpath);
drivers/md/dm-mpath.c
120
static void activate_or_offline_path(struct pgpath *pgpath);
drivers/md/dm-mpath.c
1331
static int fail_path(struct pgpath *pgpath)
drivers/md/dm-mpath.c
1334
struct multipath *m = pgpath->pg->m;
drivers/md/dm-mpath.c
1338
if (!pgpath->is_active)
drivers/md/dm-mpath.c
1343
pgpath->path.dev->name);
drivers/md/dm-mpath.c
1345
pgpath->pg->ps.type->fail_path(&pgpath->pg->ps, &pgpath->path);
drivers/md/dm-mpath.c
1346
pgpath->is_active = false;
drivers/md/dm-mpath.c
1347
pgpath->fail_count++;
drivers/md/dm-mpath.c
1351
if (pgpath == m->current_pgpath)
drivers/md/dm-mpath.c
1355
pgpath->path.dev->name, atomic_read(&m->nr_valid_paths));
drivers/md/dm-mpath.c
1370
static int reinstate_path(struct pgpath *pgpath)
drivers/md/dm-mpath.c
1373
struct multipath *m = pgpath->pg->m;
drivers/md/dm-mpath.c
1378
if (pgpath->is_active)
drivers/md/dm-mpath.c
1383
pgpath->path.dev->name);
drivers/md/dm-mpath.c
1385
r = pgpath->pg->ps.type->reinstate_path(&pgpath->pg->ps, &pgpath->path);
drivers/md/dm-mpath.c
1389
pgpath->is_active = true;
drivers/md/dm-mpath.c
1395
} else if (m->hw_handler_name && (m->current_pg == pgpath->pg)) {
drivers/md/dm-mpath.c
1396
if (queue_work(kmpath_handlerd, &pgpath->activate_path.work))
drivers/md/dm-mpath.c
1401
pgpath->path.dev->name, nr_valid_paths);
drivers/md/dm-mpath.c
1412
if (pgpath->is_active)
drivers/md/dm-mpath.c
1424
struct pgpath *pgpath;
drivers/md/dm-mpath.c
1428
list_for_each_entry(pgpath, &pg->pgpaths, list) {
drivers/md/dm-mpath.c
1429
if (pgpath->path.dev->bdev->bd_dev == dev)
drivers/md/dm-mpath.c
1430
r = action(pgpath);
drivers/md/dm-mpath.c
1523
static bool pg_init_limit_reached(struct multipath *m, struct pgpath *pgpath)
drivers/md/dm-mpath.c
1543
struct pgpath *pgpath = data;
drivers/md/dm-mpath.c
1544
struct priority_group *pg = pgpath->pg;
drivers/md/dm-mpath.c
1563
fail_path(pgpath);
drivers/md/dm-mpath.c
1578
if (pg_init_limit_reached(m, pgpath))
drivers/md/dm-mpath.c
1579
fail_path(pgpath);
drivers/md/dm-mpath.c
1589
fail_path(pgpath);
drivers/md/dm-mpath.c
1594
if (pgpath == m->current_pgpath) {
drivers/md/dm-mpath.c
160
static struct pgpath *alloc_pgpath(void)
drivers/md/dm-mpath.c
162
struct pgpath *pgpath = kzalloc_obj(*pgpath);
drivers/md/dm-mpath.c
1628
static void activate_or_offline_path(struct pgpath *pgpath)
drivers/md/dm-mpath.c
1630
struct request_queue *q = bdev_get_queue(pgpath->path.dev->bdev);
drivers/md/dm-mpath.c
1632
if (pgpath->is_active && !blk_queue_dying(q))
drivers/md/dm-mpath.c
1633
scsi_dh_activate(q, pg_init_done, pgpath);
drivers/md/dm-mpath.c
1635
pg_init_done(pgpath, SCSI_DH_DEV_OFFLINED);
drivers/md/dm-mpath.c
164
if (!pgpath)
drivers/md/dm-mpath.c
1640
struct pgpath *pgpath =
drivers/md/dm-mpath.c
1641
container_of(work, struct pgpath, activate_path.work);
drivers/md/dm-mpath.c
1643
activate_or_offline_path(pgpath);
drivers/md/dm-mpath.c
1650
struct pgpath *pgpath = mpio->pgpath;
drivers/md/dm-mpath.c
167
pgpath->is_active = true;
drivers/md/dm-mpath.c
1672
if (pgpath)
drivers/md/dm-mpath.c
1673
fail_path(pgpath);
drivers/md/dm-mpath.c
1684
if (pgpath) {
drivers/md/dm-mpath.c
1685
struct path_selector *ps = &pgpath->pg->ps;
drivers/md/dm-mpath.c
1688
ps->type->end_io(ps, &pgpath->path, mpio->nr_bytes,
drivers/md/dm-mpath.c
169
return pgpath;
drivers/md/dm-mpath.c
1700
struct pgpath *pgpath = mpio->pgpath;
drivers/md/dm-mpath.c
1707
if (pgpath)
drivers/md/dm-mpath.c
1708
fail_path(pgpath);
drivers/md/dm-mpath.c
172
static void free_pgpath(struct pgpath *pgpath)
drivers/md/dm-mpath.c
1728
if (pgpath) {
drivers/md/dm-mpath.c
1729
struct path_selector *ps = &pgpath->pg->ps;
drivers/md/dm-mpath.c
1732
ps->type->end_io(ps, &pgpath->path, mpio->nr_bytes,
drivers/md/dm-mpath.c
174
kfree(pgpath);
drivers/md/dm-mpath.c
1808
struct pgpath *p;
drivers/md/dm-mpath.c
191
struct pgpath *pgpath, *tmp;
drivers/md/dm-mpath.c
193
list_for_each_entry_safe(pgpath, tmp, pgpaths, list) {
drivers/md/dm-mpath.c
194
list_del(&pgpath->list);
drivers/md/dm-mpath.c
195
dm_put_device(ti, pgpath->path.dev);
drivers/md/dm-mpath.c
196
free_pgpath(pgpath);
drivers/md/dm-mpath.c
2028
static int probe_path(struct pgpath *pgpath)
drivers/md/dm-mpath.c
2030
struct block_device *bdev = pgpath->path.dev->bdev;
drivers/md/dm-mpath.c
2058
fail_path(pgpath);
drivers/md/dm-mpath.c
2079
struct pgpath *pgpath;
drivers/md/dm-mpath.c
2103
list_for_each_entry(pgpath, &pg->pgpaths, list) {
drivers/md/dm-mpath.c
2107
if (!pgpath->is_active)
drivers/md/dm-mpath.c
2110
r = probe_path(pgpath);
drivers/md/dm-mpath.c
2137
struct pgpath *pgpath;
drivers/md/dm-mpath.c
2150
pgpath = READ_ONCE(m->current_pgpath);
drivers/md/dm-mpath.c
2151
if (!pgpath || !mpath_double_check_test_bit(MPATHF_QUEUE_IO, m))
drivers/md/dm-mpath.c
2152
pgpath = choose_pgpath(m, 0);
drivers/md/dm-mpath.c
2154
if (pgpath) {
drivers/md/dm-mpath.c
2156
*bdev = pgpath->path.dev->bdev;
drivers/md/dm-mpath.c
2197
struct pgpath *p;
drivers/md/dm-mpath.c
2212
static int pgpath_busy(struct pgpath *pgpath)
drivers/md/dm-mpath.c
2214
struct request_queue *q = bdev_get_queue(pgpath->path.dev->bdev);
drivers/md/dm-mpath.c
2232
struct pgpath *pgpath;
drivers/md/dm-mpath.c
2272
list_for_each_entry(pgpath, &pg->pgpaths, list) {
drivers/md/dm-mpath.c
2273
if (pgpath->is_active) {
drivers/md/dm-mpath.c
2275
if (!pgpath_busy(pgpath)) {
drivers/md/dm-mpath.c
303
mpio->pgpath = NULL;
drivers/md/dm-mpath.c
317
struct pgpath *pgpath;
drivers/md/dm-mpath.c
335
list_for_each_entry(pgpath, &m->current_pg->pgpaths, list) {
drivers/md/dm-mpath.c
337
if (!pgpath->is_active)
drivers/md/dm-mpath.c
339
if (queue_delayed_work(kmpath_handlerd, &pgpath->activate_path,
drivers/md/dm-mpath.c
376
static struct pgpath *choose_path_in_pg(struct multipath *m,
drivers/md/dm-mpath.c
382
struct pgpath *pgpath;
drivers/md/dm-mpath.c
388
pgpath = path_to_pgpath(path);
drivers/md/dm-mpath.c
393
m->current_pgpath = pgpath;
drivers/md/dm-mpath.c
398
return pgpath;
drivers/md/dm-mpath.c
401
static struct pgpath *choose_pgpath(struct multipath *m, size_t nr_bytes)
drivers/md/dm-mpath.c
405
struct pgpath *pgpath;
drivers/md/dm-mpath.c
418
pgpath = choose_path_in_pg(m, pg, nr_bytes);
drivers/md/dm-mpath.c
419
if (!IS_ERR_OR_NULL(pgpath))
drivers/md/dm-mpath.c
420
return pgpath;
drivers/md/dm-mpath.c
433
pgpath = choose_path_in_pg(m, pg, nr_bytes);
drivers/md/dm-mpath.c
434
if (!IS_ERR_OR_NULL(pgpath))
drivers/md/dm-mpath.c
435
return pgpath;
drivers/md/dm-mpath.c
448
pgpath = choose_path_in_pg(m, pg, nr_bytes);
drivers/md/dm-mpath.c
449
if (!IS_ERR_OR_NULL(pgpath)) {
drivers/md/dm-mpath.c
455
return pgpath;
drivers/md/dm-mpath.c
511
struct pgpath *pgpath;
drivers/md/dm-mpath.c
518
pgpath = READ_ONCE(m->current_pgpath);
drivers/md/dm-mpath.c
519
if (!pgpath || !mpath_double_check_test_bit(MPATHF_QUEUE_IO, m))
drivers/md/dm-mpath.c
520
pgpath = choose_pgpath(m, nr_bytes);
drivers/md/dm-mpath.c
522
if (!pgpath) {
drivers/md/dm-mpath.c
53
#define path_to_pgpath(__pgp) container_of((__pgp), struct pgpath, path)
drivers/md/dm-mpath.c
533
mpio->pgpath = pgpath;
drivers/md/dm-mpath.c
536
bdev = pgpath->path.dev->bdev;
drivers/md/dm-mpath.c
544
activate_or_offline_path(pgpath);
drivers/md/dm-mpath.c
561
if (pgpath->pg->ps.type->start_io)
drivers/md/dm-mpath.c
562
pgpath->pg->ps.type->start_io(&pgpath->pg->ps,
drivers/md/dm-mpath.c
563
&pgpath->path,
drivers/md/dm-mpath.c
577
struct pgpath *pgpath = mpio->pgpath;
drivers/md/dm-mpath.c
579
if (pgpath && pgpath->pg->ps.type->end_io)
drivers/md/dm-mpath.c
580
pgpath->pg->ps.type->end_io(&pgpath->pg->ps,
drivers/md/dm-mpath.c
581
&pgpath->path,
drivers/md/dm-mpath.c
610
static struct pgpath *__map_bio(struct multipath *m, struct bio *bio)
drivers/md/dm-mpath.c
612
struct pgpath *pgpath;
drivers/md/dm-mpath.c
615
pgpath = READ_ONCE(m->current_pgpath);
drivers/md/dm-mpath.c
616
if (!pgpath || !mpath_double_check_test_bit(MPATHF_QUEUE_IO, m))
drivers/md/dm-mpath.c
617
pgpath = choose_pgpath(m, bio->bi_iter.bi_size);
drivers/md/dm-mpath.c
619
if (!pgpath) {
drivers/md/dm-mpath.c
623
pgpath = ERR_PTR(-EAGAIN);
drivers/md/dm-mpath.c
634
return pgpath;
drivers/md/dm-mpath.c
640
struct pgpath *pgpath = __map_bio(m, bio);
drivers/md/dm-mpath.c
642
if (IS_ERR(pgpath))
drivers/md/dm-mpath.c
645
if (!pgpath) {
drivers/md/dm-mpath.c
652
mpio->pgpath = pgpath;
drivers/md/dm-mpath.c
654
if (dm_ps_use_hr_timer(pgpath->pg->ps.type))
drivers/md/dm-mpath.c
658
bio_set_dev(bio, pgpath->path.dev->bdev);
drivers/md/dm-mpath.c
661
if (pgpath->pg->ps.type->start_io)
drivers/md/dm-mpath.c
662
pgpath->pg->ps.type->start_io(&pgpath->pg->ps,
drivers/md/dm-mpath.c
663
&pgpath->path,
drivers/md/dm-mpath.c
79
struct pgpath *current_pgpath;
drivers/md/dm-mpath.c
924
static struct pgpath *parse_path(struct dm_arg_set *as, struct path_selector *ps,
drivers/md/dm-mpath.c
928
struct pgpath *p;