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: Don't try to implement "status" as subset of ...



details:   https://anonhg.NetBSD.org/src/rev/0d360bbdd0bc
branches:  trunk
changeset: 847199:0d360bbdd0bc
user:      tkusumi <tkusumi%NetBSD.org@localhost>
date:      Sat Dec 14 17:15:54 2019 +0000

description:
dm: Don't try to implement "status" as subset of "table"

The way dm_table_status_ioctl() implements "status" and "table" is
not compatible with Linux kernel. Some targets have different outputs
that "status" can't be implemented as subset of "table".

Add ->info() handler to sync with "status" behavior in Linux kernel.
Some targets which currently exist in NetBSD (I think striped)
as well as some minor targets that I plan to port to NetBSD
can/should implement ->info(), but will do that in a different commit.

taken-from: DragonFlyBSD

diffstat:

 sys/dev/dm/dm.h       |   5 +++--
 sys/dev/dm/dm_ioctl.c |  26 +++++++++++++++-----------
 2 files changed, 18 insertions(+), 13 deletions(-)

diffs (71 lines):

diff -r 5803ec5c0f26 -r 0d360bbdd0bc sys/dev/dm/dm.h
--- a/sys/dev/dm/dm.h   Sat Dec 14 17:04:02 2019 +0000
+++ b/sys/dev/dm/dm.h   Sat Dec 14 17:15:54 2019 +0000
@@ -1,4 +1,4 @@
-/*        $NetBSD: dm.h,v 1.40 2019/12/14 11:20:51 tkusumi Exp $      */
+/*        $NetBSD: dm.h,v 1.41 2019/12/14 17:15:54 tkusumi Exp $      */
 
 /*
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -184,10 +184,11 @@
 
        int (*deps) (dm_table_entry_t *, prop_array_t);
        /*
-        * Status routine is called to get params string, which is target
+        * Info/status routine are called to get params string, which is 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 * (*status)(void *);
        int (*strategy)(dm_table_entry_t *, struct buf *);
        int (*sync)(dm_table_entry_t *);
diff -r 5803ec5c0f26 -r 0d360bbdd0bc sys/dev/dm/dm_ioctl.c
--- a/sys/dev/dm/dm_ioctl.c     Sat Dec 14 17:04:02 2019 +0000
+++ b/sys/dev/dm/dm_ioctl.c     Sat Dec 14 17:15:54 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: dm_ioctl.c,v 1.43 2019/12/14 14:43:38 tkusumi Exp $      */
+/* $NetBSD: dm_ioctl.c,v 1.44 2019/12/14 17:15:54 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_ioctl.c,v 1.43 2019/12/14 14:43:38 tkusumi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dm_ioctl.c,v 1.44 2019/12/14 17:15:54 tkusumi Exp $");
 
 /*
  * Locking is used to synchronise between ioctl calls and between dm_table's
@@ -942,17 +942,21 @@
                 */
                prop_dictionary_set_cstring(target_dict, DM_TABLE_PARAMS, "");
 
-               if (flags & DM_STATUS_TABLE_FLAG) {
-                       params = table_en->target->status
-                           (table_en->target_config);
+               if (flags & DM_STATUS_TABLE_FLAG)
+                       params = table_en->target->status(
+                           table_en->target_config);
+               else if (table_en->target->info)
+                       params = table_en->target->info(
+                           table_en->target_config);
+               else
+                       params = NULL;
 
-                       if (params != NULL) {
-                               prop_dictionary_set_cstring(target_dict,
-                                   DM_TABLE_PARAMS, params);
+               if (params != NULL) {
+                       prop_dictionary_set_cstring(target_dict,
+                           DM_TABLE_PARAMS, params);
+                       kmem_free(params, DM_MAX_PARAMS_SIZE);
+               }
 
-                               kmem_free(params, DM_MAX_PARAMS_SIZE);
-                       }
-               }
                prop_array_add(cmd_array, target_dict);
                prop_object_release(target_dict);
        }



Home | Main Index | Thread Index | Old Index