Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev/dm dm: Fix dm-stripe's "status" output format



details:   https://anonhg.NetBSD.org/src/rev/de59b575f9cd
branches:  trunk
changeset: 847404:de59b575f9cd
user:      tkusumi <tkusumi%NetBSD.org@localhost>
date:      Sat Dec 21 16:00:29 2019 +0000

description:
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

diffstat:

 sys/dev/dm/dm.h               |   6 +++-
 sys/dev/dm/dm_target.c        |   5 ++-
 sys/dev/dm/dm_target_stripe.c |  44 +++++++++++++++++++++++++++++++++++++++++-
 3 files changed, 49 insertions(+), 6 deletions(-)

diffs (131 lines):

diff -r bb97ff567bed -r de59b575f9cd sys/dev/dm/dm.h
--- a/sys/dev/dm/dm.h   Sat Dec 21 15:16:14 2019 +0000
+++ b/sys/dev/dm/dm.h   Sat Dec 21 16:00:29 2019 +0000
@@ -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 @@
         * 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 @@
 
 /* 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 *);
diff -r bb97ff567bed -r de59b575f9cd sys/dev/dm/dm_target.c
--- a/sys/dev/dm/dm_target.c    Sat Dec 21 15:16:14 2019 +0000
+++ b/sys/dev/dm/dm_target.c    Sat Dec 21 16:00:29 2019 +0000
@@ -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 @@
        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;
diff -r bb97ff567bed -r de59b575f9cd sys/dev/dm/dm_target_stripe.c
--- a/sys/dev/dm/dm_target_stripe.c     Sat Dec 21 15:16:14 2019 +0000
+++ b/sys/dev/dm/dm_target_stripe.c     Sat Dec 21 16:00:29 2019 +0000
@@ -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 @@
                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 @@
        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)



Home | Main Index | Thread Index | Old Index