Module Name:    src
Committed By:   tkusumi
Date:           Mon Dec 23 16:17:36 UTC 2019

Modified Files:
        src/sys/dev/dm: dm.h dm_ioctl.c dm_target.c dm_target_error.c
            dm_target_zero.c

Log Message:
dm: Make target's ->table() optional

Since ->info() (counter part of ->table() in the original dm design
in Linux kernel in .status where both INFO and TABLE are optional)
is an optional handler, make ->table() optional as well. Some
targets don't have anything to do in ->table() just as in ->info().

taken-from: DragonFlyBSD


To generate a diff of this commit:
cvs rdiff -u -r1.51 -r1.52 src/sys/dev/dm/dm.h
cvs rdiff -u -r1.48 -r1.49 src/sys/dev/dm/dm_ioctl.c
cvs rdiff -u -r1.36 -r1.37 src/sys/dev/dm/dm_target.c
cvs rdiff -u -r1.27 -r1.28 src/sys/dev/dm/dm_target_error.c
cvs rdiff -u -r1.29 -r1.30 src/sys/dev/dm/dm_target_zero.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.51 src/sys/dev/dm/dm.h:1.52
--- src/sys/dev/dm/dm.h:1.51	Sat Dec 21 16:00:29 2019
+++ src/sys/dev/dm/dm.h	Mon Dec 23 16:17:35 2019
@@ -1,4 +1,4 @@
-/*        $NetBSD: dm.h,v 1.51 2019/12/21 16:00:29 tkusumi Exp $      */
+/*        $NetBSD: dm.h,v 1.52 2019/12/23 16:17:35 tkusumi Exp $      */
 
 /*
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -181,19 +181,19 @@ typedef struct dm_target {
 	/* Destroy target_config area */
 	int (*destroy)(dm_table_entry_t *);
 
-	/*
-	 * Info/table 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 *(*table)(void *);
 	int (*strategy)(dm_table_entry_t *, struct buf *);
 	int (*upcall)(dm_table_entry_t *, struct buf *);
 
 	/*
 	 * Optional routines.
 	 */
+	/*
+	 * Info/table 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 *(*table)(void *);
 	int (*sync)(dm_table_entry_t *);
 	int (*secsize)(dm_table_entry_t *, unsigned int *);
 
@@ -262,14 +262,12 @@ int dm_target_stripe_secsize(dm_table_en
 
 /* dm_target_error.c */
 int dm_target_error_init(dm_table_entry_t*, int, char **);
-char *dm_target_error_table(void *);
 int dm_target_error_strategy(dm_table_entry_t *, struct buf *);
 int dm_target_error_destroy(dm_table_entry_t *);
 int dm_target_error_upcall(dm_table_entry_t *, struct buf *);
 
 /* dm_target_zero.c */
 int dm_target_zero_init(dm_table_entry_t *, int, char **);
-char *dm_target_zero_table(void *);
 int dm_target_zero_strategy(dm_table_entry_t *, struct buf *);
 int dm_target_zero_destroy(dm_table_entry_t *);
 int dm_target_zero_upcall(dm_table_entry_t *, struct buf *);

Index: src/sys/dev/dm/dm_ioctl.c
diff -u src/sys/dev/dm/dm_ioctl.c:1.48 src/sys/dev/dm/dm_ioctl.c:1.49
--- src/sys/dev/dm/dm_ioctl.c:1.48	Sat Dec 21 11:59:03 2019
+++ src/sys/dev/dm/dm_ioctl.c	Mon Dec 23 16:17:35 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: dm_ioctl.c,v 1.48 2019/12/21 11:59:03 tkusumi Exp $      */
+/* $NetBSD: dm_ioctl.c,v 1.49 2019/12/23 16:17:35 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.48 2019/12/21 11:59:03 tkusumi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dm_ioctl.c,v 1.49 2019/12/23 16:17:35 tkusumi Exp $");
 
 /*
  * Locking is used to synchronise between ioctl calls and between dm_table's
@@ -936,6 +936,7 @@ dm_table_status_ioctl(prop_dictionary_t 
 
 	SLIST_FOREACH(table_en, tbl, next) {
 		char *params;
+		int is_table;
 
 		target_dict = prop_dictionary_create();
 		aprint_debug("%016" PRIu64 ", length %016" PRIu64
@@ -960,10 +961,11 @@ dm_table_status_ioctl(prop_dictionary_t 
 		 */
 		prop_dictionary_set_cstring(target_dict, DM_TABLE_PARAMS, "");
 
-		if (flags & DM_STATUS_TABLE_FLAG)
+		is_table = (flags & DM_STATUS_TABLE_FLAG) ? 1 : 0;
+		if (is_table && table_en->target->table)
 			params = table_en->target->table(
 			    table_en->target_config);
-		else if (table_en->target->info)
+		else if (!is_table && table_en->target->info)
 			params = table_en->target->info(
 			    table_en->target_config);
 		else

Index: src/sys/dev/dm/dm_target.c
diff -u src/sys/dev/dm/dm_target.c:1.36 src/sys/dev/dm/dm_target.c:1.37
--- src/sys/dev/dm/dm_target.c:1.36	Sat Dec 21 16:00:29 2019
+++ src/sys/dev/dm/dm_target.c	Mon Dec 23 16:17:35 2019
@@ -1,4 +1,4 @@
-/*        $NetBSD: dm_target.c,v 1.36 2019/12/21 16:00:29 tkusumi Exp $      */
+/*        $NetBSD: dm_target.c,v 1.37 2019/12/23 16:17:35 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.36 2019/12/21 16:00:29 tkusumi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dm_target.c,v 1.37 2019/12/23 16:17:35 tkusumi Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -160,10 +160,6 @@ dm_target_insert(dm_target_t *dm_target)
 		printf("%s missing init\n", dm_target->name);
 		return EINVAL;
 	}
-	if (dm_target->table == NULL) {
-		printf("%s missing table\n", dm_target->name);
-		return EINVAL;
-	}
 	if (dm_target->strategy == NULL) {
 		printf("%s missing strategy\n", dm_target->name);
 		return EINVAL;
@@ -346,7 +342,6 @@ dm_target_init(void)
 	dmt->version[1] = 0;
 	dmt->version[2] = 0;
 	dmt->init = &dm_target_error_init;
-	dmt->table = &dm_target_error_table;
 	dmt->strategy = &dm_target_error_strategy;
 	dmt->destroy = &dm_target_error_destroy;
 	dmt->upcall = &dm_target_error_upcall;
@@ -358,7 +353,6 @@ dm_target_init(void)
 	dmt->version[1] = 0;
 	dmt->version[2] = 0;
 	dmt->init = &dm_target_zero_init;
-	dmt->table = &dm_target_zero_table;
 	dmt->strategy = &dm_target_zero_strategy;
 	dmt->destroy = &dm_target_zero_destroy;
 	dmt->upcall = &dm_target_zero_upcall;

Index: src/sys/dev/dm/dm_target_error.c
diff -u src/sys/dev/dm/dm_target_error.c:1.27 src/sys/dev/dm/dm_target_error.c:1.28
--- src/sys/dev/dm/dm_target_error.c:1.27	Sat Dec 21 11:59:03 2019
+++ src/sys/dev/dm/dm_target_error.c	Mon Dec 23 16:17:35 2019
@@ -1,4 +1,4 @@
-/*        $NetBSD: dm_target_error.c,v 1.27 2019/12/21 11:59:03 tkusumi Exp $      */
+/*        $NetBSD: dm_target_error.c,v 1.28 2019/12/23 16:17:35 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_error.c,v 1.27 2019/12/21 11:59:03 tkusumi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dm_target_error.c,v 1.28 2019/12/23 16:17:35 tkusumi Exp $");
 
 /*
  * This file implements initial version of device-mapper error target.
@@ -71,7 +71,6 @@ dm_target_error_modcmd(modcmd_t cmd, voi
 		dmt->version[1] = 0;
 		dmt->version[2] = 0;
 		dmt->init = &dm_target_error_init;
-		dmt->table = &dm_target_error_table;
 		dmt->strategy = &dm_target_error_strategy;
 		dmt->destroy = &dm_target_error_destroy;
 		dmt->upcall = &dm_target_error_upcall;
@@ -112,14 +111,6 @@ dm_target_error_init(dm_table_entry_t *t
 	return 0;
 }
 
-/* Table routine called to get params string. */
-char *
-dm_target_error_table(void *target_config)
-{
-
-	return NULL;
-}
-
 /* Strategy routine called from dm_strategy. */
 int
 dm_target_error_strategy(dm_table_entry_t *table_en, struct buf *bp)

Index: src/sys/dev/dm/dm_target_zero.c
diff -u src/sys/dev/dm/dm_target_zero.c:1.29 src/sys/dev/dm/dm_target_zero.c:1.30
--- src/sys/dev/dm/dm_target_zero.c:1.29	Sat Dec 21 11:59:03 2019
+++ src/sys/dev/dm/dm_target_zero.c	Mon Dec 23 16:17:35 2019
@@ -1,4 +1,4 @@
-/*        $NetBSD: dm_target_zero.c,v 1.29 2019/12/21 11:59:03 tkusumi Exp $      */
+/*        $NetBSD: dm_target_zero.c,v 1.30 2019/12/23 16:17:35 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_zero.c,v 1.29 2019/12/21 11:59:03 tkusumi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dm_target_zero.c,v 1.30 2019/12/23 16:17:35 tkusumi Exp $");
 
 /*
  * This file implements initial version of device-mapper zero target.
@@ -71,7 +71,6 @@ dm_target_zero_modcmd(modcmd_t cmd, void
 		dmt->version[1] = 0;
 		dmt->version[2] = 0;
 		dmt->init = &dm_target_zero_init;
-		dmt->table = &dm_target_zero_table;
 		dmt->strategy = &dm_target_zero_strategy;
 		dmt->destroy = &dm_target_zero_destroy;
 		dmt->upcall = &dm_target_zero_upcall;
@@ -115,14 +114,6 @@ dm_target_zero_init(dm_table_entry_t *ta
 	return 0;
 }
 
-/* Table routine called to get params string. */
-char *
-dm_target_zero_table(void *target_config)
-{
-
-	return NULL;
-}
-
 /*
  * This routine does IO operations.
  */

Reply via email to