drivers/md/dm-mpath.c
1031
struct pgpath *pgpath;
drivers/md/dm-mpath.c
1043
pgpath = parse_path(&path_args, &pg->ps, ti);
drivers/md/dm-mpath.c
1044
if (IS_ERR(pgpath)) {
drivers/md/dm-mpath.c
1045
r = PTR_ERR(pgpath);
drivers/md/dm-mpath.c
1049
pgpath->pg = pg;
drivers/md/dm-mpath.c
1050
list_add_tail(&pgpath->list, &pg->pgpaths);
drivers/md/dm-mpath.c
112
struct pgpath *pgpath;
drivers/md/dm-mpath.c
117
typedef int (*action_fn) (struct pgpath *pgpath);
drivers/md/dm-mpath.c
121
static void activate_or_offline_path(struct pgpath *pgpath);
drivers/md/dm-mpath.c
1332
static int fail_path(struct pgpath *pgpath)
drivers/md/dm-mpath.c
1335
struct multipath *m = pgpath->pg->m;
drivers/md/dm-mpath.c
1339
if (!pgpath->is_active)
drivers/md/dm-mpath.c
1344
pgpath->path.dev->name);
drivers/md/dm-mpath.c
1346
pgpath->pg->ps.type->fail_path(&pgpath->pg->ps, &pgpath->path);
drivers/md/dm-mpath.c
1347
pgpath->is_active = false;
drivers/md/dm-mpath.c
1348
pgpath->fail_count++;
drivers/md/dm-mpath.c
1352
if (pgpath == m->current_pgpath)
drivers/md/dm-mpath.c
1356
pgpath->path.dev->name, atomic_read(&m->nr_valid_paths));
drivers/md/dm-mpath.c
1371
static int reinstate_path(struct pgpath *pgpath)
drivers/md/dm-mpath.c
1374
struct multipath *m = pgpath->pg->m;
drivers/md/dm-mpath.c
1379
if (pgpath->is_active)
drivers/md/dm-mpath.c
1384
pgpath->path.dev->name);
drivers/md/dm-mpath.c
1386
r = pgpath->pg->ps.type->reinstate_path(&pgpath->pg->ps, &pgpath->path);
drivers/md/dm-mpath.c
1390
pgpath->is_active = true;
drivers/md/dm-mpath.c
1396
} else if (m->hw_handler_name && (m->current_pg == pgpath->pg)) {
drivers/md/dm-mpath.c
1397
if (queue_work(kmpath_handlerd, &pgpath->activate_path.work))
drivers/md/dm-mpath.c
1402
pgpath->path.dev->name, nr_valid_paths);
drivers/md/dm-mpath.c
1413
if (pgpath->is_active)
drivers/md/dm-mpath.c
1425
struct pgpath *pgpath;
drivers/md/dm-mpath.c
1429
list_for_each_entry(pgpath, &pg->pgpaths, list) {
drivers/md/dm-mpath.c
1430
if (pgpath->path.dev->bdev->bd_dev == dev)
drivers/md/dm-mpath.c
1431
r = action(pgpath);
drivers/md/dm-mpath.c
1524
static bool pg_init_limit_reached(struct multipath *m, struct pgpath *pgpath)
drivers/md/dm-mpath.c
1544
struct pgpath *pgpath = data;
drivers/md/dm-mpath.c
1545
struct priority_group *pg = pgpath->pg;
drivers/md/dm-mpath.c
1564
fail_path(pgpath);
drivers/md/dm-mpath.c
1579
if (pg_init_limit_reached(m, pgpath))
drivers/md/dm-mpath.c
1580
fail_path(pgpath);
drivers/md/dm-mpath.c
1590
fail_path(pgpath);
drivers/md/dm-mpath.c
1595
if (pgpath == m->current_pgpath) {
drivers/md/dm-mpath.c
161
static struct pgpath *alloc_pgpath(void)
drivers/md/dm-mpath.c
1629
static void activate_or_offline_path(struct pgpath *pgpath)
drivers/md/dm-mpath.c
163
struct pgpath *pgpath = kzalloc_obj(*pgpath);
drivers/md/dm-mpath.c
1631
struct request_queue *q = bdev_get_queue(pgpath->path.dev->bdev);
drivers/md/dm-mpath.c
1633
if (pgpath->is_active && !blk_queue_dying(q))
drivers/md/dm-mpath.c
1634
scsi_dh_activate(q, pg_init_done, pgpath);
drivers/md/dm-mpath.c
1636
pg_init_done(pgpath, SCSI_DH_DEV_OFFLINED);
drivers/md/dm-mpath.c
1641
struct pgpath *pgpath =
drivers/md/dm-mpath.c
1642
container_of(work, struct pgpath, activate_path.work);
drivers/md/dm-mpath.c
1644
activate_or_offline_path(pgpath);
drivers/md/dm-mpath.c
165
if (!pgpath)
drivers/md/dm-mpath.c
1651
struct pgpath *pgpath = mpio->pgpath;
drivers/md/dm-mpath.c
1673
if (pgpath)
drivers/md/dm-mpath.c
1674
fail_path(pgpath);
drivers/md/dm-mpath.c
168
pgpath->is_active = true;
drivers/md/dm-mpath.c
1685
if (pgpath) {
drivers/md/dm-mpath.c
1686
struct path_selector *ps = &pgpath->pg->ps;
drivers/md/dm-mpath.c
1689
ps->type->end_io(ps, &pgpath->path, mpio->nr_bytes,
drivers/md/dm-mpath.c
170
return pgpath;
drivers/md/dm-mpath.c
1701
struct pgpath *pgpath = mpio->pgpath;
drivers/md/dm-mpath.c
1708
if (pgpath)
drivers/md/dm-mpath.c
1709
fail_path(pgpath);
drivers/md/dm-mpath.c
1729
if (pgpath) {
drivers/md/dm-mpath.c
173
static void free_pgpath(struct pgpath *pgpath)
drivers/md/dm-mpath.c
1730
struct path_selector *ps = &pgpath->pg->ps;
drivers/md/dm-mpath.c
1733
ps->type->end_io(ps, &pgpath->path, mpio->nr_bytes,
drivers/md/dm-mpath.c
175
kfree(pgpath);
drivers/md/dm-mpath.c
1813
struct pgpath *p;
drivers/md/dm-mpath.c
192
struct pgpath *pgpath, *tmp;
drivers/md/dm-mpath.c
194
list_for_each_entry_safe(pgpath, tmp, pgpaths, list) {
drivers/md/dm-mpath.c
195
list_del(&pgpath->list);
drivers/md/dm-mpath.c
196
dm_put_device(ti, pgpath->path.dev);
drivers/md/dm-mpath.c
197
free_pgpath(pgpath);
drivers/md/dm-mpath.c
2033
static int probe_path(struct pgpath *pgpath)
drivers/md/dm-mpath.c
2035
struct block_device *bdev = pgpath->path.dev->bdev;
drivers/md/dm-mpath.c
2063
fail_path(pgpath);
drivers/md/dm-mpath.c
2084
struct pgpath *pgpath;
drivers/md/dm-mpath.c
2108
list_for_each_entry(pgpath, &pg->pgpaths, list) {
drivers/md/dm-mpath.c
2112
if (!pgpath->is_active)
drivers/md/dm-mpath.c
2115
r = probe_path(pgpath);
drivers/md/dm-mpath.c
2142
struct pgpath *pgpath;
drivers/md/dm-mpath.c
2155
pgpath = READ_ONCE(m->current_pgpath);
drivers/md/dm-mpath.c
2156
if (!pgpath || !mpath_double_check_test_bit(MPATHF_QUEUE_IO, m))
drivers/md/dm-mpath.c
2157
pgpath = choose_pgpath(m, 0);
drivers/md/dm-mpath.c
2159
if (pgpath) {
drivers/md/dm-mpath.c
2161
*bdev = pgpath->path.dev->bdev;
drivers/md/dm-mpath.c
2202
struct pgpath *p;
drivers/md/dm-mpath.c
2217
static int pgpath_busy(struct pgpath *pgpath)
drivers/md/dm-mpath.c
2219
struct request_queue *q = bdev_get_queue(pgpath->path.dev->bdev);
drivers/md/dm-mpath.c
2237
struct pgpath *pgpath;
drivers/md/dm-mpath.c
2277
list_for_each_entry(pgpath, &pg->pgpaths, list) {
drivers/md/dm-mpath.c
2278
if (pgpath->is_active) {
drivers/md/dm-mpath.c
2280
if (!pgpath_busy(pgpath)) {
drivers/md/dm-mpath.c
304
mpio->pgpath = NULL;
drivers/md/dm-mpath.c
318
struct pgpath *pgpath;
drivers/md/dm-mpath.c
336
list_for_each_entry(pgpath, &m->current_pg->pgpaths, list) {
drivers/md/dm-mpath.c
338
if (!pgpath->is_active)
drivers/md/dm-mpath.c
340
if (queue_delayed_work(kmpath_handlerd, &pgpath->activate_path,
drivers/md/dm-mpath.c
377
static struct pgpath *choose_path_in_pg(struct multipath *m,
drivers/md/dm-mpath.c
383
struct pgpath *pgpath;
drivers/md/dm-mpath.c
389
pgpath = path_to_pgpath(path);
drivers/md/dm-mpath.c
394
m->current_pgpath = pgpath;
drivers/md/dm-mpath.c
399
return pgpath;
drivers/md/dm-mpath.c
402
static struct pgpath *choose_pgpath(struct multipath *m, size_t nr_bytes)
drivers/md/dm-mpath.c
406
struct pgpath *pgpath;
drivers/md/dm-mpath.c
419
pgpath = choose_path_in_pg(m, pg, nr_bytes);
drivers/md/dm-mpath.c
420
if (!IS_ERR_OR_NULL(pgpath))
drivers/md/dm-mpath.c
421
return pgpath;
drivers/md/dm-mpath.c
434
pgpath = choose_path_in_pg(m, pg, nr_bytes);
drivers/md/dm-mpath.c
435
if (!IS_ERR_OR_NULL(pgpath))
drivers/md/dm-mpath.c
436
return pgpath;
drivers/md/dm-mpath.c
449
pgpath = choose_path_in_pg(m, pg, nr_bytes);
drivers/md/dm-mpath.c
450
if (!IS_ERR_OR_NULL(pgpath)) {
drivers/md/dm-mpath.c
456
return pgpath;
drivers/md/dm-mpath.c
512
struct pgpath *pgpath;
drivers/md/dm-mpath.c
519
pgpath = READ_ONCE(m->current_pgpath);
drivers/md/dm-mpath.c
520
if (!pgpath || !mpath_double_check_test_bit(MPATHF_QUEUE_IO, m))
drivers/md/dm-mpath.c
521
pgpath = choose_pgpath(m, nr_bytes);
drivers/md/dm-mpath.c
523
if (!pgpath) {
drivers/md/dm-mpath.c
53
#define path_to_pgpath(__pgp) container_of((__pgp), struct pgpath, path)
drivers/md/dm-mpath.c
534
mpio->pgpath = pgpath;
drivers/md/dm-mpath.c
537
bdev = pgpath->path.dev->bdev;
drivers/md/dm-mpath.c
545
activate_or_offline_path(pgpath);
drivers/md/dm-mpath.c
562
if (pgpath->pg->ps.type->start_io)
drivers/md/dm-mpath.c
563
pgpath->pg->ps.type->start_io(&pgpath->pg->ps,
drivers/md/dm-mpath.c
564
&pgpath->path,
drivers/md/dm-mpath.c
578
struct pgpath *pgpath = mpio->pgpath;
drivers/md/dm-mpath.c
580
if (pgpath && pgpath->pg->ps.type->end_io)
drivers/md/dm-mpath.c
581
pgpath->pg->ps.type->end_io(&pgpath->pg->ps,
drivers/md/dm-mpath.c
582
&pgpath->path,
drivers/md/dm-mpath.c
611
static struct pgpath *__map_bio(struct multipath *m, struct bio *bio)
drivers/md/dm-mpath.c
613
struct pgpath *pgpath;
drivers/md/dm-mpath.c
616
pgpath = READ_ONCE(m->current_pgpath);
drivers/md/dm-mpath.c
617
if (!pgpath || !mpath_double_check_test_bit(MPATHF_QUEUE_IO, m))
drivers/md/dm-mpath.c
618
pgpath = choose_pgpath(m, bio->bi_iter.bi_size);
drivers/md/dm-mpath.c
620
if (!pgpath) {
drivers/md/dm-mpath.c
624
pgpath = ERR_PTR(-EAGAIN);
drivers/md/dm-mpath.c
635
return pgpath;
drivers/md/dm-mpath.c
641
struct pgpath *pgpath = __map_bio(m, bio);
drivers/md/dm-mpath.c
643
if (IS_ERR(pgpath))
drivers/md/dm-mpath.c
646
if (!pgpath) {
drivers/md/dm-mpath.c
653
mpio->pgpath = pgpath;
drivers/md/dm-mpath.c
655
if (dm_ps_use_hr_timer(pgpath->pg->ps.type))
drivers/md/dm-mpath.c
659
bio_set_dev(bio, pgpath->path.dev->bdev);
drivers/md/dm-mpath.c
662
if (pgpath->pg->ps.type->start_io)
drivers/md/dm-mpath.c
663
pgpath->pg->ps.type->start_io(&pgpath->pg->ps,
drivers/md/dm-mpath.c
664
&pgpath->path,
drivers/md/dm-mpath.c
79
struct pgpath *current_pgpath;
drivers/md/dm-mpath.c
925
static struct pgpath *parse_path(struct dm_arg_set *as, struct path_selector *ps,
drivers/md/dm-mpath.c
929
struct pgpath *p;