]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lsfd: introduce DEVNAME column and use it as default
authorMasatake YAMATO <yamato@redhat.com>
Sun, 9 May 2021 03:16:43 +0000 (12:16 +0900)
committerKarel Zak <kzak@redhat.com>
Wed, 6 Oct 2021 09:01:53 +0000 (11:01 +0200)
Signed-off-by: Masatake YAMATO <yamato@redhat.com>
misc-utils/lsfd-bdev.c
misc-utils/lsfd-cdev.c
misc-utils/lsfd-fifo.c
misc-utils/lsfd-file.c
misc-utils/lsfd-sock.c
misc-utils/lsfd-unkn.c
misc-utils/lsfd.c
misc-utils/lsfd.h

index d5e8e12ade2b1fd226d065754b85cf44f86eb03d..7f37d00d1a868d5f238559d2858aefeaa4d8e4dd 100644 (file)
@@ -47,6 +47,7 @@ static bool bdev_fill_column(struct proc *proc __attribute__((__unused__)),
                if (scols_line_set_data(ln, column_index, "BLK"))
                        err(EXIT_FAILURE, _("failed to add output data"));
                return true;
+       case COL_DEVNAME:
        case COL_PARTITION:
                partition = get_partition(file->stat.st_rdev);
                if (partition) {
index f84d56324895193d1e0a5618d5dc1e9dc8abd373..01f2928910cfaed2d78c6f1bef8e7131378a4be6 100644 (file)
@@ -75,6 +75,21 @@ static bool cdev_fill_column(struct proc *proc __attribute__((__unused__)),
                        xasprintf(&str, "%u",
                                  major(file->stat.st_rdev));
                break;
+       case COL_DEVNAME:
+               chrdrv = get_chrdrv(major(file->stat.st_rdev));
+               miscdev = NULL;
+               if (chrdrv && strcmp(chrdrv, "misc") == 0)
+                       miscdev = get_miscdev(minor(file->stat.st_rdev));
+               if (chrdrv) {
+                       if (miscdev) {
+                               xasprintf(&str, "misc:%s", miscdev);
+                       } else {
+                               xasprintf(&str, "%s:%u", chrdrv,
+                                         minor(file->stat.st_rdev));
+                       }
+                       break;
+               }
+               /* FALL THROUGH */
        case COL_DEVICE:
                xasprintf(&str, "%u:%u",
                          major(file->stat.st_rdev),
index 2e858e8f9c168ae7c6cd99cdc70cc339f5e243e9..c89ac55d462d6e6055cc0e471851b2c5d90b1615 100644 (file)
@@ -38,6 +38,13 @@ static bool fifo_fill_column(struct proc *proc __attribute__((__unused__)),
                if (scols_line_set_data(ln, column_index, "FIFO"))
                        err(EXIT_FAILURE, _("failed to add output data"));
                return true;
+       case COL_DEVNAME:
+               if (major(file->stat.st_dev) == 0
+                   && strncmp(file->name, "pipe:", 5) == 0) {
+                       str = strdup("nodev:pipefs");
+                       break;
+               }
+               return false;
        default:
                return false;
        }
index c832af39c45084da015e2c4e32d9b968e8c86a58..a0adb23cfb6e8785d90cb58dbfb539885cf4aa3f 100644 (file)
@@ -222,6 +222,16 @@ static bool file_fill_column(struct proc *proc,
        case COL_INODE:
                xasprintf(&str, "%llu", (unsigned long long)file->stat.st_ino);
                break;
+       case COL_DEVNAME:
+               if (major(file->stat.st_dev) == 0) {
+                       const char *filesystem = get_nodev_filesystem(proc,
+                                                                     minor(file->stat.st_dev));
+                       if (filesystem) {
+                               xasprintf(&str, "nodev:%s", filesystem);
+                               break;
+                       }
+               }
+               /* FALL THROUGH */
        case COL_PARTITION:
                partition = get_partition(file->stat.st_dev);
                if (partition) {
index 96d624ab644388a3402de3420cbc8d624af66f7f..bd0a2a0b91b540db60a7e2e20504f13d9e4dd822 100644 (file)
@@ -58,6 +58,13 @@ static bool sock_fill_column(struct proc *proc __attribute__((__unused__)),
                        break;
                }
                return false;
+       case COL_DEVNAME:
+               if (major(file->stat.st_dev) == 0
+                   && strncmp(file->name, "socket:", 7) == 0) {
+                       str = strdup("nodev:sockfs");
+                       break;
+               }
+               return false;
        default:
                return false;
        }
index af77cc46a5350126a3284ab5e41a13fb870e8073..be69e4464798bc552236a1c29045bdcb8b72f409 100644 (file)
@@ -31,14 +31,29 @@ static bool unkn_fill_column(struct proc *proc __attribute__((__unused__)),
                             int column_id,
                             size_t column_index)
 {
+       char *str = NULL;
+
        switch(column_id) {
        case COL_TYPE:
                if (scols_line_set_data(ln, column_index, "UNKN"))
                        err(EXIT_FAILURE, _("failed to add output data"));
                return true;
+       case COL_DEVNAME:
+               if (major(file->stat.st_dev) == 0
+                   && strncmp(file->name, "anon_inode:", 11) == 0) {
+                       str = strdup("nodev:anon_inodefs");
+                       break;
+               }
+               return false;
        default:
                return false;
        }
+
+       if (!str)
+               err(EXIT_FAILURE, _("failed to add output data"));
+       if (scols_line_refer_data(ln, column_index, str))
+               err(EXIT_FAILURE, _("failed to add output data"));
+       return true;
 }
 
 struct file *make_unkn(const struct file_class *class,
index 65aff806c48bfeeb02f9c6f29bef5b282a838fbd..1d9304f9b2716a86f28ef69abd304d702b453ba8 100644 (file)
@@ -110,6 +110,8 @@ static struct colinfo infos[] = {
                N_("ID of device containing file") },
        [COL_DEVICE]  = { "DEVICE",   0, SCOLS_FL_RIGHT, SCOLS_JSON_STRING,
                N_("device ID for special, or ID of device containing file") },
+       [COL_DEVNAME] = { "DEVNAME",  0, SCOLS_FL_RIGHT, SCOLS_JSON_STRING,
+               N_("device name, decoded version of DEVICE") },
        [COL_FLAGS]   = { "FLAGS",    0, SCOLS_FL_RIGHT, SCOLS_JSON_STRING,
                N_("flags specified when opening the file") },
        [COL_FD]      = { "FD",       0, SCOLS_FL_RIGHT, SCOLS_JSON_NUMBER,
@@ -155,7 +157,7 @@ static int default_columns[] = {
        COL_ASSOC,
        COL_MODE,
        COL_TYPE,
-       COL_DEVICE,
+       COL_DEVNAME,
        COL_MNT_ID,
        COL_INODE,
        COL_NAME,
@@ -169,7 +171,7 @@ static int default_threads_columns[] = {
        COL_ASSOC,
        COL_MODE,
        COL_TYPE,
-       COL_DEVICE,
+       COL_DEVNAME,
        COL_MNT_ID,
        COL_INODE,
        COL_NAME,
index a274ad9c70d38a4f8f958e7f633df23f8d1fac3d..f36e17df738bc64da96ebaed67026be6931a7816 100644 (file)
@@ -56,6 +56,7 @@ enum {
        COL_COMMAND,
        COL_DELETED,
        COL_DEVICE,
+       COL_DEVNAME,
        COL_DEV,
        COL_FD,
        COL_FLAGS,