From b7405bb6344bbb92fda75e6d91e4c23263ccf8de Mon Sep 17 00:00:00 2001 From: Tomohiro Kusumi Date: Wed, 28 Oct 2015 00:17:46 +0900 Subject: [PATCH] sys/dev/disk/dm: Add info() handler for striped target for compatibility f134a703 mentioned output of dmsetup(8) "status" and "table" were compatible with that of Linux till dm-delay was added, but striped target was not compatible. The stripe target in Linux has different implementation for these two like delay target has. This commit adds info() handler for striped target similar to what f134a703 did to delay target. --- .../dm/targets/striped/dm_target_striped.c | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/sys/dev/disk/dm/targets/striped/dm_target_striped.c b/sys/dev/disk/dm/targets/striped/dm_target_striped.c index 647538827a..847ca62e33 100644 --- a/sys/dev/disk/dm/targets/striped/dm_target_striped.c +++ b/sys/dev/disk/dm/targets/striped/dm_target_striped.c @@ -141,6 +141,52 @@ dm_target_stripe_init(dm_table_entry_t *table_en, char *params) return 0; } +/* + * Info routine called to get params string. + */ +static char * +dm_target_stripe_info(void *target_config) +{ + dm_target_stripe_config_t *tsc; + char *params; + char *ptr; + size_t len; + int ret; + int i; + + tsc = target_config; + + len = DM_MAX_PARAMS_SIZE; + params = kmalloc(len, M_DM, M_WAITOK | M_ZERO); + ptr = params; + + ret = ksnprintf(ptr, len, "%d ", tsc->stripe_num); + ptr += ret; + len -= ret; + + for (i = 0; i < tsc->stripe_num; i++) { + ret = ksnprintf(ptr, len, "%s ", + tsc->stripe_devs[i].pdev->udev_name); + ptr += ret; + len -= ret; + } + + ret = ksnprintf(ptr, len, "1 "); + ptr += ret; + len -= ret; + + /* + * stripe target currently has no error_count. + */ + for (i = 0; i < tsc->stripe_num; i++) { + ret = ksnprintf(ptr, len, "A"); + ptr += ret; + len -= ret; + } + + return params; +} + /* * Table routine called to get params string. */ @@ -405,6 +451,7 @@ dmts_mod_handler(module_t mod, int type, void *unused) dmt->version[2] = 3; strlcpy(dmt->name, "striped", DM_MAX_TYPE_NAME); dmt->init = &dm_target_stripe_init; + dmt->info = &dm_target_stripe_info; dmt->table = &dm_target_stripe_table; dmt->strategy = &dm_target_stripe_strategy; dmt->destroy = &dm_target_stripe_destroy; -- 2.41.0