]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lsblk: add -v/--virtio
authorzhenwei pi <pizhenwei@bytedance.com>
Fri, 3 Jun 2022 12:24:00 +0000 (20:24 +0800)
committerKarel Zak <kzak@redhat.com>
Mon, 6 Jun 2022 10:31:56 +0000 (12:31 +0200)
Add -v/--virtio to filter the virtio block devices.

Signed-off-by: zhenwei pi <pizhenwei@bytedance.com>
bash-completion/lsblk
misc-utils/lsblk.8.adoc
misc-utils/lsblk.c
misc-utils/lsblk.h

index 011af41c243e8bdd8cff179e70d59c1789a0cf16..697dd23d21cefd9fc80b188cc2e23981c937c86a 100644 (file)
@@ -80,6 +80,7 @@ _lsblk_module()
                                --topology
                                --scsi
                                --nvme
+                               --virtio
                                --sort
                                --width
                                --help
index 8c6d50f79c95b0032657ff88e6b80ae4eba23736..6a9770ef22d32a50935665d469ab09fc754d87bf 100644 (file)
@@ -75,6 +75,9 @@ Output info about device owner, group and mode. This option is equivalent to *-o
 *-N*, *--nvme*::
 Output info about NVMe devices only.
 
+*-v*, *--virtio*::
+Output info about virtio devices only.
+
 *-n*, *--noheadings*::
 Do not print a header line.
 
index dfa31797072abb5b18c69f862224be1ddcc302ab..64d7edad6f4bcc82be3d625d76fae58b3daafb5e 100644 (file)
@@ -1361,6 +1361,16 @@ static int initialize_device(struct lsblk_device *dev,
                }
        }
 
+       /* ignore non-virtio devices */
+       if (lsblk->virtio) {
+               char *transport = get_transport(dev);
+
+               if (!transport || strcmp(transport, "virtio")) {
+                       DBG(DEV, ul_debugobj(dev, "non-virtio device -- ignore"));
+                       return -1;
+               }
+       }
+
        DBG(DEV, ul_debugobj(dev, "%s: context successfully initialized", dev->name));
        return 0;
 }
@@ -1938,6 +1948,7 @@ static void __attribute__((__noreturn__)) usage(void)
        fputs(_(" -P, --pairs          use key=\"value\" output format\n"), out);
        fputs(_(" -S, --scsi           output info about SCSI devices\n"), out);
        fputs(_(" -N, --nvme           output info about NVMe devices\n"), out);
+       fputs(_(" -v, --virtio         output info about virtio devices\n"), out);
        fputs(_(" -T, --tree[=<column>] use tree format output\n"), out);
        fputs(_(" -a, --all            print all devices\n"), out);
        fputs(_(" -b, --bytes          print SIZE in bytes rather than in human readable format\n"), out);
@@ -2024,6 +2035,7 @@ int main(int argc, char *argv[])
                { "pairs",      no_argument,       NULL, 'P' },
                { "scsi",       no_argument,       NULL, 'S' },
                { "nvme",       no_argument,       NULL, 'N' },
+               { "virtio",     no_argument,       NULL, 'v' },
                { "sort",       required_argument, NULL, 'x' },
                { "sysroot",    required_argument, NULL, OPT_SYSROOT },
                { "shell",      no_argument,       NULL, 'y' },
@@ -2057,7 +2069,7 @@ int main(int argc, char *argv[])
        lsblk_init_debug();
 
        while((c = getopt_long(argc, argv,
-                               "AabdDzE:e:fhJlNnMmo:OpPiI:rstVST::w:x:y",
+                               "AabdDzE:e:fhJlNnMmo:OpPiI:rstVvST::w:x:y",
                                longopts, NULL)) != -1) {
 
                err_exclusive_options(c, longopts, excl, excl_st);
@@ -2189,6 +2201,15 @@ int main(int argc, char *argv[])
                        add_uniq_column(COL_TRANSPORT);
                        add_uniq_column(COL_RQ_SIZE);
                        break;
+               case 'v':
+                       lsblk->nodeps = 1;
+                       lsblk->virtio = 1;
+                       add_uniq_column(COL_NAME);
+                       add_uniq_column(COL_TYPE);
+                       add_uniq_column(COL_TRANSPORT);
+                       add_uniq_column(COL_SIZE);
+                       add_uniq_column(COL_RQ_SIZE);
+                       break;
                case 'T':
                        force_tree = 1;
                        if (optarg) {
index 536120a9cc927bbdb57ae99e093b2edb51a24079..31c9ecad5d44183a71f575a7029e35fce8b88988 100644 (file)
@@ -52,6 +52,7 @@ struct lsblk {
        unsigned int nodeps:1;          /* don't print slaves/holders */
        unsigned int scsi:1;            /* print only device with HCTL (SCSI) */
        unsigned int nvme:1;            /* print NVMe device only */
+       unsigned int virtio:1;          /* print virtio device only */
        unsigned int paths:1;           /* print devnames with "/dev" prefix */
        unsigned int sort_hidden:1;     /* sort column not between output columns */
        unsigned int dedup_hidden :1;   /* deduplication column not between output columns */