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)