[lvm-devel] [PATCH 2/2] dev names: Add "--names" switch to dmsetup to show names instead of major:minor pairs for deps and ls commands
Zdenek Kabelac
zkabelac at redhat.com
Wed Nov 9 10:56:45 UTC 2011
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
More information about the lvm-devel
mailing list