Add new ps args to status/table output. --- diff/drivers/md/dm-mpath.c 2004-11-10 15:13:37.000000000 +0000 +++ source/drivers/md/dm-mpath.c 2004-11-10 15:13:44.000000000 +0000 @@ -1024,12 +1024,15 @@ * Info string has the following format: * num_multipath_feature_args [multipath_feature_args]* * num_handler_status_args [handler_status_args]* - * num_groups [A|D|E num_paths num_selector_args [path_dev A|F fail_count [selector_args]* ]+ ]+ + * num_groups [A|D|E num_ps_status_args [ps_status_args]* + * num_paths num_selector_args + * [path_dev A|F fail_count [selector_args]* ]+ ]+ * * Table string has the following format (identical to the constructor string): * num_feature_args [features_args]* * num_handler_args hw_handler [hw_handler_args]* - * num_groups [priority selector-name num_paths num_selector_args [path_dev [selector_args]* ]+ ]+ + * num_groups [priority selector-name num_ps_args [ps_args]* + * num_paths num_selector_args [path_dev [selector_args]* ]+ ]+ */ static int multipath_status(struct dm_target *ti, status_type_t type, char *result, unsigned int maxlen) @@ -1073,6 +1076,13 @@ else state = 'E'; /* Enabled */ + if (pg->ps.type->status) + sz += pg->ps.type->status(&pg->ps, NULL, type, + result + sz, + maxlen - sz); + else + DMEMIT("0 "); + DMEMIT("%c %u %u ", state, pg->nr_paths, pg->ps.type->info_args); @@ -1093,8 +1103,16 @@ case STATUSTYPE_TABLE: list_for_each_entry(pg, &m->priority_groups, list) { - DMEMIT("%s %u %u ", pg->ps.type->name, - pg->nr_paths, pg->ps.type->table_args); + DMEMIT("%s ", pg->ps.type->name); + + if (pg->ps.type->status) + sz += pg->ps.type->status(&pg->ps, NULL, type, + result + sz, + maxlen - sz); + else + DMEMIT("0 "); + + DMEMIT("%u %u ", pg->nr_paths, pg->ps.type->table_args); list_for_each_entry(p, &pg->pgpaths, list) { format_dev_t(buffer, p->path.dev->bdev->bd_dev); --- diff/drivers/md/dm-round-robin.c 2004-11-10 15:13:31.000000000 +0000 +++ source/drivers/md/dm-round-robin.c 2004-11-10 15:13:44.000000000 +0000 @@ -84,15 +84,20 @@ static int rr_status(struct path_selector *ps, struct path *path, status_type_t type, char *result, unsigned int maxlen) { - struct path_info *pi = path->pscontext; + struct path_info *pi; int sz = 0; - switch(type) { - case STATUSTYPE_INFO: - break; - case STATUSTYPE_TABLE: - DMEMIT("%u ", pi->repeat_count); - break; + if (!path) + DMEMIT("0 "); + else { + switch(type) { + case STATUSTYPE_INFO: + break; + case STATUSTYPE_TABLE: + pi = path->pscontext; + DMEMIT("%u ", pi->repeat_count); + break; + } } return sz;