pgpath 46 drivers/md/dm-mpath.c #define path_to_pgpath(__pgp) container_of((__pgp), struct pgpath, path) pgpath 72 drivers/md/dm-mpath.c struct pgpath *current_pgpath; pgpath 100 drivers/md/dm-mpath.c struct pgpath *pgpath; pgpath 104 drivers/md/dm-mpath.c typedef int (*action_fn) (struct pgpath *pgpath); pgpath 108 drivers/md/dm-mpath.c static void activate_or_offline_path(struct pgpath *pgpath); pgpath 128 drivers/md/dm-mpath.c static struct pgpath *alloc_pgpath(void) pgpath 130 drivers/md/dm-mpath.c struct pgpath *pgpath = kzalloc(sizeof(*pgpath), GFP_KERNEL); pgpath 132 drivers/md/dm-mpath.c if (!pgpath) pgpath 135 drivers/md/dm-mpath.c pgpath->is_active = true; pgpath 137 drivers/md/dm-mpath.c return pgpath; pgpath 140 drivers/md/dm-mpath.c static void free_pgpath(struct pgpath *pgpath) pgpath 142 drivers/md/dm-mpath.c kfree(pgpath); pgpath 159 drivers/md/dm-mpath.c struct pgpath *pgpath, *tmp; pgpath 161 drivers/md/dm-mpath.c list_for_each_entry_safe(pgpath, tmp, pgpaths, list) { pgpath 162 drivers/md/dm-mpath.c list_del(&pgpath->list); pgpath 163 drivers/md/dm-mpath.c dm_put_device(ti, pgpath->path.dev); pgpath 164 drivers/md/dm-mpath.c free_pgpath(pgpath); pgpath 274 drivers/md/dm-mpath.c mpio->pgpath = NULL; pgpath 286 drivers/md/dm-mpath.c struct pgpath *pgpath; pgpath 304 drivers/md/dm-mpath.c list_for_each_entry(pgpath, &m->current_pg->pgpaths, list) { pgpath 306 drivers/md/dm-mpath.c if (!pgpath->is_active) pgpath 308 drivers/md/dm-mpath.c if (queue_delayed_work(kmpath_handlerd, &pgpath->activate_path, pgpath 343 drivers/md/dm-mpath.c static struct pgpath *choose_path_in_pg(struct multipath *m, pgpath 349 drivers/md/dm-mpath.c struct pgpath *pgpath; pgpath 355 drivers/md/dm-mpath.c pgpath = path_to_pgpath(path); pgpath 360 drivers/md/dm-mpath.c m->current_pgpath = pgpath; pgpath 365 drivers/md/dm-mpath.c return pgpath; pgpath 368 drivers/md/dm-mpath.c static struct pgpath *choose_pgpath(struct multipath *m, size_t nr_bytes) pgpath 372 drivers/md/dm-mpath.c struct pgpath *pgpath; pgpath 390 drivers/md/dm-mpath.c pgpath = choose_path_in_pg(m, pg, nr_bytes); pgpath 391 drivers/md/dm-mpath.c if (!IS_ERR_OR_NULL(pgpath)) pgpath 392 drivers/md/dm-mpath.c return pgpath; pgpath 399 drivers/md/dm-mpath.c pgpath = choose_path_in_pg(m, pg, nr_bytes); pgpath 400 drivers/md/dm-mpath.c if (!IS_ERR_OR_NULL(pgpath)) pgpath 401 drivers/md/dm-mpath.c return pgpath; pgpath 414 drivers/md/dm-mpath.c pgpath = choose_path_in_pg(m, pg, nr_bytes); pgpath 415 drivers/md/dm-mpath.c if (!IS_ERR_OR_NULL(pgpath)) { pgpath 418 drivers/md/dm-mpath.c return pgpath; pgpath 489 drivers/md/dm-mpath.c struct pgpath *pgpath; pgpath 496 drivers/md/dm-mpath.c pgpath = READ_ONCE(m->current_pgpath); pgpath 497 drivers/md/dm-mpath.c if (!pgpath || !test_bit(MPATHF_QUEUE_IO, &m->flags)) pgpath 498 drivers/md/dm-mpath.c pgpath = choose_pgpath(m, nr_bytes); pgpath 500 drivers/md/dm-mpath.c if (!pgpath) { pgpath 511 drivers/md/dm-mpath.c mpio->pgpath = pgpath; pgpath 514 drivers/md/dm-mpath.c bdev = pgpath->path.dev->bdev; pgpath 522 drivers/md/dm-mpath.c activate_or_offline_path(pgpath); pgpath 540 drivers/md/dm-mpath.c if (pgpath->pg->ps.type->start_io) pgpath 541 drivers/md/dm-mpath.c pgpath->pg->ps.type->start_io(&pgpath->pg->ps, pgpath 542 drivers/md/dm-mpath.c &pgpath->path, pgpath 556 drivers/md/dm-mpath.c struct pgpath *pgpath = mpio->pgpath; pgpath 558 drivers/md/dm-mpath.c if (pgpath && pgpath->pg->ps.type->end_io) pgpath 559 drivers/md/dm-mpath.c pgpath->pg->ps.type->end_io(&pgpath->pg->ps, pgpath 560 drivers/md/dm-mpath.c &pgpath->path, pgpath 571 drivers/md/dm-mpath.c static struct pgpath *__map_bio(struct multipath *m, struct bio *bio) pgpath 573 drivers/md/dm-mpath.c struct pgpath *pgpath; pgpath 578 drivers/md/dm-mpath.c pgpath = READ_ONCE(m->current_pgpath); pgpath 579 drivers/md/dm-mpath.c if (!pgpath || !test_bit(MPATHF_QUEUE_IO, &m->flags)) pgpath 580 drivers/md/dm-mpath.c pgpath = choose_pgpath(m, bio->bi_iter.bi_size); pgpath 585 drivers/md/dm-mpath.c if ((pgpath && queue_io) || pgpath 586 drivers/md/dm-mpath.c (!pgpath && test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags))) { pgpath 601 drivers/md/dm-mpath.c return pgpath; pgpath 607 drivers/md/dm-mpath.c struct pgpath *pgpath = __map_bio(m, bio); pgpath 609 drivers/md/dm-mpath.c if (IS_ERR(pgpath)) pgpath 612 drivers/md/dm-mpath.c if (!pgpath) { pgpath 619 drivers/md/dm-mpath.c mpio->pgpath = pgpath; pgpath 622 drivers/md/dm-mpath.c bio_set_dev(bio, pgpath->path.dev->bdev); pgpath 625 drivers/md/dm-mpath.c if (pgpath->pg->ps.type->start_io) pgpath 626 drivers/md/dm-mpath.c pgpath->pg->ps.type->start_io(&pgpath->pg->ps, pgpath 627 drivers/md/dm-mpath.c &pgpath->path, pgpath 836 drivers/md/dm-mpath.c static struct pgpath *parse_path(struct dm_arg_set *as, struct path_selector *ps, pgpath 840 drivers/md/dm-mpath.c struct pgpath *p; pgpath 929 drivers/md/dm-mpath.c struct pgpath *pgpath; pgpath 941 drivers/md/dm-mpath.c pgpath = parse_path(&path_args, &pg->ps, ti); pgpath 942 drivers/md/dm-mpath.c if (IS_ERR(pgpath)) { pgpath 943 drivers/md/dm-mpath.c r = PTR_ERR(pgpath); pgpath 947 drivers/md/dm-mpath.c pgpath->pg = pg; pgpath 948 drivers/md/dm-mpath.c list_add_tail(&pgpath->list, &pg->pgpaths); pgpath 1220 drivers/md/dm-mpath.c static int fail_path(struct pgpath *pgpath) pgpath 1223 drivers/md/dm-mpath.c struct multipath *m = pgpath->pg->m; pgpath 1227 drivers/md/dm-mpath.c if (!pgpath->is_active) pgpath 1230 drivers/md/dm-mpath.c DMWARN("Failing path %s.", pgpath->path.dev->name); pgpath 1232 drivers/md/dm-mpath.c pgpath->pg->ps.type->fail_path(&pgpath->pg->ps, &pgpath->path); pgpath 1233 drivers/md/dm-mpath.c pgpath->is_active = false; pgpath 1234 drivers/md/dm-mpath.c pgpath->fail_count++; pgpath 1238 drivers/md/dm-mpath.c if (pgpath == m->current_pgpath) pgpath 1242 drivers/md/dm-mpath.c pgpath->path.dev->name, atomic_read(&m->nr_valid_paths)); pgpath 1255 drivers/md/dm-mpath.c static int reinstate_path(struct pgpath *pgpath) pgpath 1259 drivers/md/dm-mpath.c struct multipath *m = pgpath->pg->m; pgpath 1264 drivers/md/dm-mpath.c if (pgpath->is_active) pgpath 1267 drivers/md/dm-mpath.c DMWARN("Reinstating path %s.", pgpath->path.dev->name); pgpath 1269 drivers/md/dm-mpath.c r = pgpath->pg->ps.type->reinstate_path(&pgpath->pg->ps, &pgpath->path); pgpath 1273 drivers/md/dm-mpath.c pgpath->is_active = true; pgpath 1279 drivers/md/dm-mpath.c } else if (m->hw_handler_name && (m->current_pg == pgpath->pg)) { pgpath 1280 drivers/md/dm-mpath.c if (queue_work(kmpath_handlerd, &pgpath->activate_path.work)) pgpath 1285 drivers/md/dm-mpath.c pgpath->path.dev->name, nr_valid_paths); pgpath 1306 drivers/md/dm-mpath.c struct pgpath *pgpath; pgpath 1310 drivers/md/dm-mpath.c list_for_each_entry(pgpath, &pg->pgpaths, list) { pgpath 1311 drivers/md/dm-mpath.c if (pgpath->path.dev == dev) pgpath 1312 drivers/md/dm-mpath.c r = action(pgpath); pgpath 1398 drivers/md/dm-mpath.c static bool pg_init_limit_reached(struct multipath *m, struct pgpath *pgpath) pgpath 1418 drivers/md/dm-mpath.c struct pgpath *pgpath = data; pgpath 1419 drivers/md/dm-mpath.c struct priority_group *pg = pgpath->pg; pgpath 1438 drivers/md/dm-mpath.c fail_path(pgpath); pgpath 1453 drivers/md/dm-mpath.c if (pg_init_limit_reached(m, pgpath)) pgpath 1454 drivers/md/dm-mpath.c fail_path(pgpath); pgpath 1464 drivers/md/dm-mpath.c fail_path(pgpath); pgpath 1469 drivers/md/dm-mpath.c if (pgpath == m->current_pgpath) { pgpath 1503 drivers/md/dm-mpath.c static void activate_or_offline_path(struct pgpath *pgpath) pgpath 1505 drivers/md/dm-mpath.c struct request_queue *q = bdev_get_queue(pgpath->path.dev->bdev); pgpath 1507 drivers/md/dm-mpath.c if (pgpath->is_active && !blk_queue_dying(q)) pgpath 1508 drivers/md/dm-mpath.c scsi_dh_activate(q, pg_init_done, pgpath); pgpath 1510 drivers/md/dm-mpath.c pg_init_done(pgpath, SCSI_DH_DEV_OFFLINED); pgpath 1515 drivers/md/dm-mpath.c struct pgpath *pgpath = pgpath 1516 drivers/md/dm-mpath.c container_of(work, struct pgpath, activate_path.work); pgpath 1518 drivers/md/dm-mpath.c activate_or_offline_path(pgpath); pgpath 1525 drivers/md/dm-mpath.c struct pgpath *pgpath = mpio->pgpath; pgpath 1547 drivers/md/dm-mpath.c if (pgpath) pgpath 1548 drivers/md/dm-mpath.c fail_path(pgpath); pgpath 1559 drivers/md/dm-mpath.c if (pgpath) { pgpath 1560 drivers/md/dm-mpath.c struct path_selector *ps = &pgpath->pg->ps; pgpath 1563 drivers/md/dm-mpath.c ps->type->end_io(ps, &pgpath->path, mpio->nr_bytes); pgpath 1574 drivers/md/dm-mpath.c struct pgpath *pgpath = mpio->pgpath; pgpath 1581 drivers/md/dm-mpath.c if (pgpath) pgpath 1582 drivers/md/dm-mpath.c fail_path(pgpath); pgpath 1603 drivers/md/dm-mpath.c if (pgpath) { pgpath 1604 drivers/md/dm-mpath.c struct path_selector *ps = &pgpath->pg->ps; pgpath 1607 drivers/md/dm-mpath.c ps->type->end_io(ps, &pgpath->path, mpio->nr_bytes); pgpath 1672 drivers/md/dm-mpath.c struct pgpath *p; pgpath 1855 drivers/md/dm-mpath.c struct pgpath *current_pgpath; pgpath 1902 drivers/md/dm-mpath.c struct pgpath *p; pgpath 1917 drivers/md/dm-mpath.c static int pgpath_busy(struct pgpath *pgpath) pgpath 1919 drivers/md/dm-mpath.c struct request_queue *q = bdev_get_queue(pgpath->path.dev->bdev); pgpath 1937 drivers/md/dm-mpath.c struct pgpath *pgpath; pgpath 1969 drivers/md/dm-mpath.c list_for_each_entry(pgpath, &pg->pgpaths, list) { pgpath 1970 drivers/md/dm-mpath.c if (pgpath->is_active) { pgpath 1972 drivers/md/dm-mpath.c if (!pgpath_busy(pgpath)) {