All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 2/2] dev names: Add "--names" switch to dmsetup to show names instead of major:minor pairs for deps and ls commands
@ 2011-11-07 12:49 Peter Rajnoha
  2011-11-09 10:56 ` Zdenek Kabelac
  0 siblings, 1 reply; 2+ messages in thread
From: Peter Rajnoha @ 2011-11-07 12:49 UTC (permalink / raw)
  To: lvm-devel

This makes it a little bit more user-friendly for admins
if they read the output so they don't need to look for
the names themselves.

(there's also an RFE filed here: https://bugzilla.redhat.com/show_bug.cgi?id=731785).

An example with mirror volume:

[0] rawhide/~ # dmsetup deps
vg-lvol0: 3 dependencies	: (253, 2) (253, 1) (253, 0)
vg-lvol0_mimage_1: 1 dependencies	: (8, 16)
vg-lvol0_mimage_0: 1 dependencies	: (8, 0)
vg-lvol0_mlog: 1 dependencies	: (8, 128)

[0] rawhide/~ # dmsetup deps --names
vg-lvol0: 3 dependencies	: (vg-lvol0_mimage_1) (vg-lvol0_mimage_0) (vg-lvol0_mlog)
vg-lvol0_mimage_1: 1 dependencies	: (sdb)
vg-lvol0_mimage_0: 1 dependencies	: (sda)
vg-lvol0_mlog: 1 dependencies	: (sdi)


[0] rawhide/~ # dmsetup ls
vg-lvol0	(253, 3)
vg-lvol0_mimage_1	(253, 2)
vg-lvol0_mimage_0	(253, 1)
vg-lvol0_mlog	(253, 0)

[0] rawhide/~ # dmsetup ls --names
vg-lvol0	(dm-3)
vg-lvol0_mimage_1	(dm-2)
vg-lvol0_mimage_0	(dm-1)
vg-lvol0_mlog	(dm-0)


[0] rawhide/~ # dmsetup ls --tree
vg-lvol0 (253:3)
 ??vg-lvol0_mimage_1 (253:2)
 ?  ?? (8:16)
 ??vg-lvol0_mimage_0 (253:1)
 ?  ?? (8:0)
 ??vg-lvol0_mlog (253:0)
    ?? (8:128)
[0] rawhide/~ # dmsetup ls --tree --names

vg-lvol0 (dm-3)
 ??vg-lvol0_mimage_1 (dm-2)
 ?  ?? (sdb)
 ??vg-lvol0_mimage_0 (dm-1)
 ?  ?? (sda)
 ??vg-lvol0_mlog (dm-0)
    ?? (sdi)


Peter
---
 tools/dmsetup.c |   51 +++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 39 insertions(+), 12 deletions(-)

diff --git a/tools/dmsetup.c b/tools/dmsetup.c
index f35c8a5..0430772 100644
--- a/tools/dmsetup.c
+++ b/tools/dmsetup.c
@@ -130,6 +130,7 @@ enum {
 	MINOR_ARG,
 	MODE_ARG,
 	NAMEPREFIXES_ARG,
+	NAMES_ARG,
 	NOFLUSH_ARG,
 	NOHEADINGS_ARG,
 	NOLOCKFS_ARG,
@@ -1767,6 +1768,7 @@ static int _deps(CMD_ARGS)
 	struct dm_task *dmt;
 	struct dm_info info;
 	char *name = NULL;
+	char dev_name[PATH_MAX];
 
 	if (names)
 		name = names->name;
@@ -1813,10 +1815,17 @@ static int _deps(CMD_ARGS)
 		printf("%s: ", name);
 	printf("%d dependencies\t:", deps->count);
 
-	for (i = 0; i < deps->count; i++)
-		printf(" (%d, %d)",
-		       (int) MAJOR(deps->device[i]),
-		       (int) MINOR(deps->device[i]));
+	for (i = 0; i < deps->count; i++) {
+		if (_switches[NAMES_ARG] &&
+		    dm_device_get_name((uint32_t) MAJOR(deps->device[i]),
+				       (uint32_t) MINOR(deps->device[i]),
+				       0, dev_name, PATH_MAX))
+			printf(" (%s)", dev_name);
+		else
+			printf(" (%d, %d)",
+			       (int) MAJOR(deps->device[i]),
+			       (int) MINOR(deps->device[i]));
+	}
 	printf("\n");
 
 	if (multiple_devices && _switches[VERBOSE_ARG])
@@ -1831,8 +1840,16 @@ static int _deps(CMD_ARGS)
 
 static int _display_name(CMD_ARGS)
 {
-	printf("%s\t(%d, %d)\n", names->name,
-	       (int) MAJOR(names->dev), (int) MINOR(names->dev));
+	char dev_name[PATH_MAX];
+
+	if (_switches[NAMES_ARG] &&
+	    dm_device_get_name((uint32_t) MAJOR(names->dev),
+			       (uint32_t) MINOR(names->dev),
+			       1,dev_name, PATH_MAX))
+		printf("%s\t(%s)\n", names->name, dev_name);
+	else
+		printf("%s\t(%d, %d)\n", names->name,
+		       (int) MAJOR(names->dev), (int) MINOR(names->dev));
 
 	return 1;
 }
@@ -2057,6 +2074,7 @@ static void _display_tree_node(struct dm_tree_node *node, unsigned depth,
 	const char *name;
 	const struct dm_info *info;
 	int first_on_line = 0;
+	char dev_name[PATH_MAX];
 
 	/* Sub-tree for targets has 2 more depth */
 	if (depth + 2 > MAX_DEPTH)
@@ -2091,9 +2109,15 @@ static void _display_tree_node(struct dm_tree_node *node, unsigned depth,
 
 	if (_tree_switches[TR_DEVICE]) {
 		_out_string(name ? " (" : "(");
-		(void) _out_int(info->major);
-		_out_char(':');
-		(void) _out_int(info->minor);
+		if (_switches[NAMES_ARG] &&
+		    dm_device_get_name(info->major, info->minor,
+				       1, dev_name, PATH_MAX))
+			_out_string(dev_name);
+		else {
+			(void) _out_int(info->major);
+			_out_char(':');
+			(void) _out_int(info->minor);
+		}
 		_out_char(')');
 	}
 
@@ -2780,9 +2804,9 @@ static struct command _commands[] = {
 	{"reload", "<device> [<table_file>]", 0, 2, 0, _load},
 	{"rename", "<device> [--setuuid] <new_name_or_uuid>", 1, 2, 0, _rename},
 	{"message", "<device> <sector> <message>", 2, -1, 0, _message},
-	{"ls", "[--target <target_type>] [--exec <command>] [--tree [-o options]]", 0, 0, 0, _ls},
+	{"ls", "[--names] [--target <target_type>] [--exec <command>] [--tree [-o options]]", 0, 0, 0, _ls},
 	{"info", "[<device>]", 0, -1, 1, _info},
-	{"deps", "[<device>]", 0, -1, 1, _deps},
+	{"deps", "[--names] [<device>]", 0, -1, 1, _deps},
 	{"status", "[<device>] [--target <target_type>]", 0, -1, 1, _status},
 	{"table", "[<device>] [--target <target_type>] [--showkeys]", 0, -1, 1, _status},
 	{"wait", "<device> [<event_nr>]", 0, 2, 0, _wait},
@@ -2806,7 +2830,7 @@ static void _usage(FILE *out)
 
 	fprintf(out, "Usage:\n\n");
 	fprintf(out, "dmsetup [--version] [-h|--help [-c|-C|--columns]]\n"
-		"        [--checks] [-v|--verbose [-v|--verbose ...]]\n"
+		"        [--checks] [--names] [-v|--verbose [-v|--verbose ...]]\n"
 		"        [-r|--readonly] [--noopencount] [--nolockfs] [--inactive]\n"
 		"        [--udevcookie [cookie]] [--noudevrules] [--noudevsync] [--verifyudev]\n"
 		"        [-y|--yes] [--readahead [+]<sectors>|auto|none] [--retry]\n"
@@ -3172,6 +3196,7 @@ static int _process_switches(int *argc, char ***argv, const char *dev_dir)
 		{"minor", 1, &ind, MINOR_ARG},
 		{"mode", 1, &ind, MODE_ARG},
 		{"nameprefixes", 0, &ind, NAMEPREFIXES_ARG},
+		{"names", 0, &ind, NAMES_ARG},
 		{"noflush", 0, &ind, NOFLUSH_ARG},
 		{"noheadings", 0, &ind, NOHEADINGS_ARG},
 		{"nolockfs", 0, &ind, NOLOCKFS_ARG},
@@ -3339,6 +3364,8 @@ static int _process_switches(int *argc, char ***argv, const char *dev_dir)
 			_switches[INACTIVE_ARG]++;
 		if ((ind == NAMEPREFIXES_ARG))
 			_switches[NAMEPREFIXES_ARG]++;
+		if ((ind == NAMES_ARG))
+			_switches[NAMES_ARG]++;
 		if ((ind == NOFLUSH_ARG))
 			_switches[NOFLUSH_ARG]++;
 		if ((ind == NOHEADINGS_ARG))



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [PATCH 2/2] dev names: Add "--names" switch to dmsetup to show names instead of major:minor pairs for deps and ls commands
  2011-11-07 12:49 [PATCH 2/2] dev names: Add "--names" switch to dmsetup to show names instead of major:minor pairs for deps and ls commands Peter Rajnoha
@ 2011-11-09 10:56 ` Zdenek Kabelac
  0 siblings, 0 replies; 2+ messages in thread
From: Zdenek Kabelac @ 2011-11-09 10:56 UTC (permalink / raw)
  To: lvm-devel

Dne 7.11.2011 13:49, Peter Rajnoha napsal(a):
> This makes it a little bit more user-friendly for admins
> if they read the output so they don't need to look for
> the names themselves.
> 
> (there's also an RFE filed here: https://bugzilla.redhat.com/show_bug.cgi?id=731785).
> 
> An example with mirror volume:
> 
> [0] rawhide/~ # dmsetup deps
> vg-lvol0: 3 dependencies	: (253, 2) (253, 1) (253, 0)
> vg-lvol0_mimage_1: 1 dependencies	: (8, 16)
> vg-lvol0_mimage_0: 1 dependencies	: (8, 0)
> vg-lvol0_mlog: 1 dependencies	: (8, 128)
> 
> [0] rawhide/~ # dmsetup deps --names
> vg-lvol0: 3 dependencies	: (vg-lvol0_mimage_1) (vg-lvol0_mimage_0) (vg-lvol0_mlog)
> vg-lvol0_mimage_1: 1 dependencies	: (sdb)
> vg-lvol0_mimage_0: 1 dependencies	: (sda)
> vg-lvol0_mlog: 1 dependencies	: (sdi)

I think, we are mixing /dev  names  and  internal dm names with same symbol
(). So maybe we could use {} for dm names, and  ()  for real /dev
{vg-lvol0_mimage_1} (dm-3)

Or an options   --dmnames could be used if the user really want to see them
translated to dm table names. Maybe option --uuid  could be supported as well
to print uuid device names (like we have  dmsetup ls --tree -o uuid)


> 
> 
> [0] rawhide/~ # dmsetup ls
> vg-lvol0	(253, 3)
> vg-lvol0_mimage_1	(253, 2)
> vg-lvol0_mimage_0	(253, 1)
> vg-lvol0_mlog	(253, 0)
> 
> [0] rawhide/~ # dmsetup ls --names
> vg-lvol0	(dm-3)
> vg-lvol0_mimage_1	(dm-2)
> vg-lvol0_mimage_0	(dm-1)
> vg-lvol0_mlog	(dm-0)
> 
> 
> [0] rawhide/~ # dmsetup ls --tree
> vg-lvol0 (253:3)
>  ??vg-lvol0_mimage_1 (253:2)
>  ?  ?? (8:16)
>  ??vg-lvol0_mimage_0 (253:1)
>  ?  ?? (8:0)
>  ??vg-lvol0_mlog (253:0)
>     ?? (8:128)
> [0] rawhide/~ # dmsetup ls --tree --names
> 
> vg-lvol0 (dm-3)
>  ??vg-lvol0_mimage_1 (dm-2)
>  ?  ?? (sdb)
>  ??vg-lvol0_mimage_0 (dm-1)
>  ?  ?? (sda)
>  ??vg-lvol0_mlog (dm-0)
>     ?? (sdi)
> 

Hmm RFE :) would be nice to have this supported with -C columns, so dm device
names would appear nicely aligned.


> 
> Peter
> ---
>  tools/dmsetup.c |   51 +++++++++++++++++++++++++++++++++++++++------------
>  1 files changed, 39 insertions(+), 12 deletions(-)
> 
> diff --git a/tools/dmsetup.c b/tools/dmsetup.c
> index f35c8a5..0430772 100644
> --- a/tools/dmsetup.c
> +++ b/tools/dmsetup.c
> @@ -130,6 +130,7 @@ enum {
>  	MINOR_ARG,
>  	MODE_ARG,
>  	NAMEPREFIXES_ARG,
> +	NAMES_ARG,
>  	NOFLUSH_ARG,
>  	NOHEADINGS_ARG,
>  	NOLOCKFS_ARG,
> @@ -1767,6 +1768,7 @@ static int _deps(CMD_ARGS)
>  	struct dm_task *dmt;
>  	struct dm_info info;
>  	char *name = NULL;
> +	char dev_name[PATH_MAX];
>  
>  	if (names)
>  		name = names->name;
> @@ -1813,10 +1815,17 @@ static int _deps(CMD_ARGS)
>  		printf("%s: ", name);
>  	printf("%d dependencies\t:", deps->count);
>  
> -	for (i = 0; i < deps->count; i++)
> -		printf(" (%d, %d)",
> -		       (int) MAJOR(deps->device[i]),
> -		       (int) MINOR(deps->device[i]));
> +	for (i = 0; i < deps->count; i++) {
> +		if (_switches[NAMES_ARG] &&
> +		    dm_device_get_name((uint32_t) MAJOR(deps->device[i]),
> +				       (uint32_t) MINOR(deps->device[i]),
> +				       0, dev_name, PATH_MAX))
> +			printf(" (%s)", dev_name);
> +		else
> +			printf(" (%d, %d)",
> +			       (int) MAJOR(deps->device[i]),
> +			       (int) MINOR(deps->device[i]));
> +	}
>  	printf("\n");
>  
>  	if (multiple_devices && _switches[VERBOSE_ARG])
> @@ -1831,8 +1840,16 @@ static int _deps(CMD_ARGS)
>  
>  static int _display_name(CMD_ARGS)
>  {
> -	printf("%s\t(%d, %d)\n", names->name,
> -	       (int) MAJOR(names->dev), (int) MINOR(names->dev));
> +	char dev_name[PATH_MAX];
> +
> +	if (_switches[NAMES_ARG] &&
> +	    dm_device_get_name((uint32_t) MAJOR(names->dev),
> +			       (uint32_t) MINOR(names->dev),
> +			       1,dev_name, PATH_MAX))

+space  1, dev_name

> +		printf("%s\t(%s)\n", names->name, dev_name);
> +	else
> +		printf("%s\t(%d, %d)\n", names->name,
> +		       (int) MAJOR(names->dev), (int) MINOR(names->dev));
>  
>  	return 1;
>  }
> @@ -2057,6 +2074,7 @@ static void _display_tree_node(struct dm_tree_node *node, unsigned depth,
>  	const char *name;
>  	const struct dm_info *info;
>  	int first_on_line = 0;
> +	char dev_name[PATH_MAX];
>  
>  	/* Sub-tree for targets has 2 more depth */
>  	if (depth + 2 > MAX_DEPTH)
> @@ -2091,9 +2109,15 @@ static void _display_tree_node(struct dm_tree_node *node, unsigned depth,
>  
>  	if (_tree_switches[TR_DEVICE]) {
>  		_out_string(name ? " (" : "(");
> -		(void) _out_int(info->major);
> -		_out_char(':');
> -		(void) _out_int(info->minor);
> +		if (_switches[NAMES_ARG] &&
> +		    dm_device_get_name(info->major, info->minor,
> +				       1, dev_name, PATH_MAX))
> +			_out_string(dev_name);
> +		else {
> +			(void) _out_int(info->major);
> +			_out_char(':');
> +			(void) _out_int(info->minor);
> +		}
>  		_out_char(')');
>  	}
>  
> @@ -2780,9 +2804,9 @@ static struct command _commands[] = {
>  	{"reload", "<device> [<table_file>]", 0, 2, 0, _load},
>  	{"rename", "<device> [--setuuid] <new_name_or_uuid>", 1, 2, 0, _rename},
>  	{"message", "<device> <sector> <message>", 2, -1, 0, _message},
> -	{"ls", "[--target <target_type>] [--exec <command>] [--tree [-o options]]", 0, 0, 0, _ls},
> +	{"ls", "[--names] [--target <target_type>] [--exec <command>] [--tree [-o options]]", 0, 0, 0, _ls},

Hmm, here we have somewhat inconsistent interface, where --tree option
supports  uuid -o option, but pure  'ls' does not have a way to display uuid
with device major:minor number.  So maybe  --uuid should be also add as direct
option like --names (agk?)

Zdenek



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2011-11-09 10:56 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-11-07 12:49 [PATCH 2/2] dev names: Add "--names" switch to dmsetup to show names instead of major:minor pairs for deps and ls commands Peter Rajnoha
2011-11-09 10:56 ` Zdenek Kabelac

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.