Lines Matching refs:pgpath
32 struct pgpath { struct
43 #define path_to_pgpath(__pgp) container_of((__pgp), struct pgpath, path) argument
82 struct pgpath *current_pgpath;
112 struct pgpath *pgpath; member
116 typedef int (*action_fn) (struct pgpath *pgpath);
123 static int __pgpath_busy(struct pgpath *pgpath);
130 static struct pgpath *alloc_pgpath(void) in alloc_pgpath()
132 struct pgpath *pgpath = kzalloc(sizeof(*pgpath), GFP_KERNEL); in alloc_pgpath() local
134 if (pgpath) { in alloc_pgpath()
135 pgpath->is_active = 1; in alloc_pgpath()
136 INIT_DELAYED_WORK(&pgpath->activate_path, activate_path); in alloc_pgpath()
139 return pgpath; in alloc_pgpath()
142 static void free_pgpath(struct pgpath *pgpath) in free_pgpath() argument
144 kfree(pgpath); in free_pgpath()
161 struct pgpath *pgpath, *tmp; in free_pgpaths() local
164 list_for_each_entry_safe(pgpath, tmp, pgpaths, list) { in free_pgpaths()
165 list_del(&pgpath->list); in free_pgpaths()
167 scsi_dh_detach(bdev_get_queue(pgpath->path.dev->bdev)); in free_pgpaths()
168 dm_put_device(ti, pgpath->path.dev); in free_pgpaths()
169 free_pgpath(pgpath); in free_pgpaths()
256 struct pgpath *pgpath; in __pg_init_all_paths() local
272 list_for_each_entry(pgpath, &m->current_pg->pgpaths, list) { in __pg_init_all_paths()
274 if (!pgpath->is_active) in __pg_init_all_paths()
276 if (queue_delayed_work(kmpath_handlerd, &pgpath->activate_path, in __pg_init_all_paths()
283 static void __switch_pg(struct multipath *m, struct pgpath *pgpath) in __switch_pg() argument
285 m->current_pg = pgpath->pg; in __switch_pg()
389 struct pgpath *pgpath; in __multipath_map() local
400 pgpath = m->current_pgpath; in __multipath_map()
402 if (!pgpath) { in __multipath_map()
416 mpio->pgpath = pgpath; in __multipath_map()
419 bdev = pgpath->path.dev->bdev; in __multipath_map()
442 if (pgpath->pg->ps.type->start_io) in __multipath_map()
443 pgpath->pg->ps.type->start_io(&pgpath->pg->ps, in __multipath_map()
444 &pgpath->path, in __multipath_map()
553 static struct pgpath *parse_path(struct dm_arg_set *as, struct path_selector *ps, in parse_path()
557 struct pgpath *p; in parse_path()
690 struct pgpath *pgpath; in parse_priority_group() local
702 pgpath = parse_path(&path_args, &pg->ps, ti); in parse_priority_group()
703 if (IS_ERR(pgpath)) { in parse_priority_group()
704 r = PTR_ERR(pgpath); in parse_priority_group()
708 pgpath->pg = pg; in parse_priority_group()
709 list_add_tail(&pgpath->list, &pg->pgpaths); in parse_priority_group()
959 static int fail_path(struct pgpath *pgpath) in fail_path() argument
962 struct multipath *m = pgpath->pg->m; in fail_path()
966 if (!pgpath->is_active) in fail_path()
969 DMWARN("Failing path %s.", pgpath->path.dev->name); in fail_path()
971 pgpath->pg->ps.type->fail_path(&pgpath->pg->ps, &pgpath->path); in fail_path()
972 pgpath->is_active = 0; in fail_path()
973 pgpath->fail_count++; in fail_path()
977 if (pgpath == m->current_pgpath) in fail_path()
981 pgpath->path.dev->name, m->nr_valid_paths); in fail_path()
994 static int reinstate_path(struct pgpath *pgpath) in reinstate_path() argument
998 struct multipath *m = pgpath->pg->m; in reinstate_path()
1002 if (pgpath->is_active) in reinstate_path()
1005 if (!pgpath->pg->ps.type->reinstate_path) { in reinstate_path()
1007 pgpath->pg->ps.type->name); in reinstate_path()
1012 r = pgpath->pg->ps.type->reinstate_path(&pgpath->pg->ps, &pgpath->path); in reinstate_path()
1016 pgpath->is_active = 1; in reinstate_path()
1021 } else if (m->hw_handler_name && (m->current_pg == pgpath->pg)) { in reinstate_path()
1022 if (queue_work(kmpath_handlerd, &pgpath->activate_path.work)) in reinstate_path()
1027 pgpath->path.dev->name, m->nr_valid_paths); in reinstate_path()
1046 struct pgpath *pgpath; in action_dev() local
1050 list_for_each_entry(pgpath, &pg->pgpaths, list) { in action_dev()
1051 if (pgpath->path.dev == dev) in action_dev()
1052 r = action(pgpath); in action_dev()
1138 static int pg_init_limit_reached(struct multipath *m, struct pgpath *pgpath) in pg_init_limit_reached() argument
1157 struct pgpath *pgpath = data; in pg_init_done() local
1158 struct priority_group *pg = pgpath->pg; in pg_init_done()
1177 fail_path(pgpath); in pg_init_done()
1191 if (pg_init_limit_reached(m, pgpath)) in pg_init_done()
1192 fail_path(pgpath); in pg_init_done()
1201 fail_path(pgpath); in pg_init_done()
1206 if (pgpath == m->current_pgpath) { in pg_init_done()
1236 struct pgpath *pgpath = in activate_path() local
1237 container_of(work, struct pgpath, activate_path.work); in activate_path()
1239 if (pgpath->is_active) in activate_path()
1240 scsi_dh_activate(bdev_get_queue(pgpath->path.dev->bdev), in activate_path()
1241 pg_init_done, pgpath); in activate_path()
1243 pg_init_done(pgpath, SCSI_DH_DEV_OFFLINED); in activate_path()
1287 if (mpio->pgpath) in do_end_io()
1288 fail_path(mpio->pgpath); in do_end_io()
1310 struct pgpath *pgpath; in multipath_end_io() local
1317 pgpath = mpio->pgpath; in multipath_end_io()
1318 if (pgpath) { in multipath_end_io()
1319 ps = &pgpath->pg->ps; in multipath_end_io()
1321 ps->type->end_io(ps, &pgpath->path, mpio->nr_bytes); in multipath_end_io()
1386 struct pgpath *p; in multipath_status()
1555 struct pgpath *pgpath; in multipath_ioctl() local
1570 pgpath = m->current_pgpath; in multipath_ioctl()
1572 if (pgpath) { in multipath_ioctl()
1573 bdev = pgpath->path.dev->bdev; in multipath_ioctl()
1574 mode = pgpath->path.dev->mode; in multipath_ioctl()
1577 if ((pgpath && m->queue_io) || (!pgpath && m->queue_if_no_path)) in multipath_ioctl()
1613 struct pgpath *p; in multipath_iterate_devices()
1628 static int __pgpath_busy(struct pgpath *pgpath) in __pgpath_busy() argument
1630 struct request_queue *q = bdev_get_queue(pgpath->path.dev->bdev); in __pgpath_busy()
1648 struct pgpath *pgpath; in multipath_busy() local
1679 list_for_each_entry(pgpath, &pg->pgpaths, list) in multipath_busy()
1680 if (pgpath->is_active) { in multipath_busy()
1683 if (!__pgpath_busy(pgpath)) { in multipath_busy()