• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/drivers/md/

Lines Matching defs:pgpath

28 struct pgpath {
39 #define path_to_pgpath(__pgp) container_of((__pgp), struct pgpath, path)
74 struct pgpath *current_pgpath;
104 struct pgpath *pgpath;
108 typedef int (*action_fn) (struct pgpath *pgpath);
124 static struct pgpath *alloc_pgpath(void)
126 struct pgpath *pgpath = kzalloc(sizeof(*pgpath), GFP_KERNEL);
128 if (pgpath) {
129 pgpath->is_active = 1;
130 INIT_WORK(&pgpath->activate_path, activate_path);
133 return pgpath;
136 static void free_pgpath(struct pgpath *pgpath)
138 kfree(pgpath);
155 struct pgpath *pgpath, *tmp;
158 list_for_each_entry_safe(pgpath, tmp, pgpaths, list) {
159 list_del(&pgpath->list);
161 scsi_dh_detach(bdev_get_queue(pgpath->path.dev->bdev));
162 dm_put_device(ti, pgpath->path.dev);
163 free_pgpath(pgpath);
229 struct pgpath *pgpath;
233 list_for_each_entry(pgpath, &m->current_pg->pgpaths, list) {
235 if (!pgpath->is_active)
237 if (queue_work(kmpath_handlerd, &pgpath->activate_path))
242 static void __switch_pg(struct multipath *m, struct pgpath *pgpath)
244 m->current_pg = pgpath->pg;
337 struct pgpath *pgpath;
342 /* Do we need to select a new pgpath? */
347 pgpath = m->current_pgpath;
352 if ((pgpath && m->queue_io) ||
353 (!pgpath && m->queue_if_no_path)) {
360 pgpath = NULL;
362 } else if (pgpath) {
363 bdev = pgpath->path.dev->bdev;
371 mpio->pgpath = pgpath;
374 if (r == DM_MAPIO_REMAPPED && pgpath->pg->ps.type->start_io)
375 pgpath->pg->ps.type->start_io(&pgpath->pg->ps, &pgpath->path,
446 struct pgpath *pgpath = NULL;
458 pgpath = m->current_pgpath;
460 if ((pgpath && !m->queue_io) ||
461 (!pgpath && !m->queue_if_no_path))
464 if (m->pg_init_required && !m->pg_init_in_progress && pgpath)
582 static struct pgpath *parse_path(struct arg_set *as, struct path_selector *ps,
586 struct pgpath *p;
693 struct pgpath *pgpath;
705 pgpath = parse_path(&path_args, &pg->ps, ti);
706 if (IS_ERR(pgpath)) {
707 r = PTR_ERR(pgpath);
711 pgpath->pg = pg;
712 list_add_tail(&pgpath->list, &pg->pgpaths);
962 static int fail_path(struct pgpath *pgpath)
965 struct multipath *m = pgpath->pg->m;
969 if (!pgpath->is_active)
972 DMWARN("Failing path %s.", pgpath->path.dev->name);
974 pgpath->pg->ps.type->fail_path(&pgpath->pg->ps, &pgpath->path);
975 pgpath->is_active = 0;
976 pgpath->fail_count++;
980 if (pgpath == m->current_pgpath)
984 pgpath->path.dev->name, m->nr_valid_paths);
997 static int reinstate_path(struct pgpath *pgpath)
1001 struct multipath *m = pgpath->pg->m;
1005 if (pgpath->is_active)
1008 if (!pgpath->pg->ps.type->reinstate_path) {
1010 pgpath->pg->ps.type->name);
1015 r = pgpath->pg->ps.type->reinstate_path(&pgpath->pg->ps, &pgpath->path);
1019 pgpath->is_active = 1;
1024 } else if (m->hw_handler_name && (m->current_pg == pgpath->pg)) {
1025 if (queue_work(kmpath_handlerd, &pgpath->activate_path))
1030 pgpath->path.dev->name, m->nr_valid_paths);
1047 struct pgpath *pgpath;
1051 list_for_each_entry(pgpath, &pg->pgpaths, list) {
1052 if (pgpath->path.dev == dev)
1053 r = action(pgpath);
1137 static int pg_init_limit_reached(struct multipath *m, struct pgpath *pgpath)
1156 struct pgpath *pgpath = data;
1157 struct priority_group *pg = pgpath->pg;
1175 fail_path(pgpath);
1188 if (pg_init_limit_reached(m, pgpath))
1189 fail_path(pgpath);
1198 fail_path(pgpath);
1203 if (pgpath == m->current_pgpath) {
1231 struct pgpath *pgpath =
1232 container_of(work, struct pgpath, activate_path);
1234 scsi_dh_activate(bdev_get_queue(pgpath->path.dev->bdev),
1235 pg_init_done, pgpath);
1267 if (mpio->pgpath)
1268 fail_path(mpio->pgpath);
1283 struct pgpath *pgpath = mpio->pgpath;
1288 if (pgpath) {
1289 ps = &pgpath->pg->ps;
1291 ps->type->end_io(ps, &pgpath->path, mpio->nr_bytes);
1356 struct pgpath *p;
1551 struct pgpath *p;
1566 static int __pgpath_busy(struct pgpath *pgpath)
1568 struct request_queue *q = bdev_get_queue(pgpath->path.dev->bdev);
1586 struct pgpath *pgpath;
1611 list_for_each_entry(pgpath, &pg->pgpaths, list)
1612 if (pgpath->is_active) {
1615 if (!__pgpath_busy(pgpath)) {