Module Name: src Committed By: tkusumi Date: Sat Dec 21 16:00:30 UTC 2019
Modified Files: src/sys/dev/dm: dm.h dm_target.c dm_target_stripe.c Log Message: dm: Fix dm-stripe's "status" output format As mentioned in "dm: Don't try to implement "status" as subset of "table"", dm-stripe in NetBSD doesn't have correct "status" output format. Implement ->info() to sync with Linux kernel. Note that num_error for stripe device isn't implemented yet. taken-from: DragonFlyBSD To generate a diff of this commit: cvs rdiff -u -r1.50 -r1.51 src/sys/dev/dm/dm.h cvs rdiff -u -r1.35 -r1.36 src/sys/dev/dm/dm_target.c cvs rdiff -u -r1.42 -r1.43 src/sys/dev/dm/dm_target_stripe.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/dm/dm.h diff -u src/sys/dev/dm/dm.h:1.50 src/sys/dev/dm/dm.h:1.51 --- src/sys/dev/dm/dm.h:1.50 Sat Dec 21 11:59:03 2019 +++ src/sys/dev/dm/dm.h Sat Dec 21 16:00:29 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: dm.h,v 1.50 2019/12/21 11:59:03 tkusumi Exp $ */ +/* $NetBSD: dm.h,v 1.51 2019/12/21 16:00:29 tkusumi Exp $ */ /* * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -186,13 +186,14 @@ typedef struct dm_target { * specific. When dm_table_status_ioctl is called with flag * DM_STATUS_TABLE_FLAG I have to sent params string back. */ - char *(*info)(void *); char *(*table)(void *); int (*strategy)(dm_table_entry_t *, struct buf *); int (*upcall)(dm_table_entry_t *, struct buf *); + /* * Optional routines. */ + char *(*info)(void *); int (*sync)(dm_table_entry_t *); int (*secsize)(dm_table_entry_t *, unsigned int *); @@ -251,6 +252,7 @@ int dm_target_linear_secsize(dm_table_en /* dm_target_stripe.c */ int dm_target_stripe_init(dm_table_entry_t *, int, char **); +char *dm_target_stripe_info(void *); char *dm_target_stripe_table(void *); int dm_target_stripe_strategy(dm_table_entry_t *, struct buf *); int dm_target_stripe_sync(dm_table_entry_t *); Index: src/sys/dev/dm/dm_target.c diff -u src/sys/dev/dm/dm_target.c:1.35 src/sys/dev/dm/dm_target.c:1.36 --- src/sys/dev/dm/dm_target.c:1.35 Sat Dec 21 11:59:03 2019 +++ src/sys/dev/dm/dm_target.c Sat Dec 21 16:00:29 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: dm_target.c,v 1.35 2019/12/21 11:59:03 tkusumi Exp $ */ +/* $NetBSD: dm_target.c,v 1.36 2019/12/21 16:00:29 tkusumi Exp $ */ /* * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -29,7 +29,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: dm_target.c,v 1.35 2019/12/21 11:59:03 tkusumi Exp $"); +__KERNEL_RCSID(0, "$NetBSD: dm_target.c,v 1.36 2019/12/21 16:00:29 tkusumi Exp $"); #include <sys/types.h> #include <sys/param.h> @@ -331,6 +331,7 @@ dm_target_init(void) dmt->version[1] = 0; dmt->version[2] = 3; 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->sync = &dm_target_stripe_sync; Index: src/sys/dev/dm/dm_target_stripe.c diff -u src/sys/dev/dm/dm_target_stripe.c:1.42 src/sys/dev/dm/dm_target_stripe.c:1.43 --- src/sys/dev/dm/dm_target_stripe.c:1.42 Sat Dec 21 11:59:03 2019 +++ src/sys/dev/dm/dm_target_stripe.c Sat Dec 21 16:00:29 2019 @@ -1,4 +1,4 @@ -/*$NetBSD: dm_target_stripe.c,v 1.42 2019/12/21 11:59:03 tkusumi Exp $*/ +/*$NetBSD: dm_target_stripe.c,v 1.43 2019/12/21 16:00:29 tkusumi Exp $*/ /* * Copyright (c) 2009 The NetBSD Foundation, Inc. @@ -29,7 +29,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: dm_target_stripe.c,v 1.42 2019/12/21 11:59:03 tkusumi Exp $"); +__KERNEL_RCSID(0, "$NetBSD: dm_target_stripe.c,v 1.43 2019/12/21 16:00:29 tkusumi Exp $"); /* * This file implements initial version of device-mapper stripe target. @@ -80,6 +80,7 @@ dm_target_stripe_modcmd(modcmd_t cmd, vo dmt->version[1] = 0; dmt->version[2] = 0; 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->sync = &dm_target_stripe_sync; @@ -179,6 +180,45 @@ dm_target_stripe_init(dm_table_entry_t * return 0; } +/* Info routine called to get params string. */ +char * +dm_target_stripe_info(void *target_config) +{ + dm_target_linear_config_t *tlc; + dm_target_stripe_config_t *tsc; + char *params, *ptr, buf[256]; + int ret, i = 0; + size_t len; + + tsc = target_config; + + len = DM_MAX_PARAMS_SIZE; + params = kmem_alloc(len, KM_SLEEP); + ptr = params; + + ret = snprintf(ptr, len, "%d ", tsc->stripe_num); + ptr += ret; + len -= ret; + + memset(buf, 0, sizeof(buf)); + TAILQ_FOREACH(tlc, &tsc->stripe_devs, entries) { + ret = snprintf(ptr, len, "%s ", tlc->pdev->udev_name); + if (0 /*tlc->num_error*/) + buf[i] = 'D'; + else + buf[i] = 'A'; + i++; + ptr += ret; + len -= ret; + } + + ret = snprintf(ptr, len, "1 %s", buf); + ptr += ret; + len -= ret; + + return params; +} + /* Table routine called to get params string. */ char * dm_target_stripe_table(void *target_config)