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/5783bd718bd7
branches: trunk
changeset: 466183:5783bd718bd7
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 6e5c92be588c -r 5783bd718bd7 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 6e5c92be588c -r 5783bd718bd7 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