From: Masatake YAMATO Date: Sun, 9 May 2021 03:16:43 +0000 (+0900) Subject: lsfd: introduce DEVNAME column and use it as default X-Git-Tag: v2.38-rc1~144^2~133 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a500de34006e2af9c135b558f4ea0f4a9e0e84b5;p=thirdparty%2Futil-linux.git lsfd: introduce DEVNAME column and use it as default Signed-off-by: Masatake YAMATO --- diff --git a/misc-utils/lsfd-bdev.c b/misc-utils/lsfd-bdev.c index d5e8e12ade..7f37d00d1a 100644 --- a/misc-utils/lsfd-bdev.c +++ b/misc-utils/lsfd-bdev.c @@ -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) { diff --git a/misc-utils/lsfd-cdev.c b/misc-utils/lsfd-cdev.c index f84d563248..01f2928910 100644 --- a/misc-utils/lsfd-cdev.c +++ b/misc-utils/lsfd-cdev.c @@ -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), diff --git a/misc-utils/lsfd-fifo.c b/misc-utils/lsfd-fifo.c index 2e858e8f9c..c89ac55d46 100644 --- a/misc-utils/lsfd-fifo.c +++ b/misc-utils/lsfd-fifo.c @@ -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; } diff --git a/misc-utils/lsfd-file.c b/misc-utils/lsfd-file.c index c832af39c4..a0adb23cfb 100644 --- a/misc-utils/lsfd-file.c +++ b/misc-utils/lsfd-file.c @@ -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) { diff --git a/misc-utils/lsfd-sock.c b/misc-utils/lsfd-sock.c index 96d624ab64..bd0a2a0b91 100644 --- a/misc-utils/lsfd-sock.c +++ b/misc-utils/lsfd-sock.c @@ -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; } diff --git a/misc-utils/lsfd-unkn.c b/misc-utils/lsfd-unkn.c index af77cc46a5..be69e44647 100644 --- a/misc-utils/lsfd-unkn.c +++ b/misc-utils/lsfd-unkn.c @@ -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, diff --git a/misc-utils/lsfd.c b/misc-utils/lsfd.c index 65aff806c4..1d9304f9b2 100644 --- a/misc-utils/lsfd.c +++ b/misc-utils/lsfd.c @@ -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, diff --git a/misc-utils/lsfd.h b/misc-utils/lsfd.h index a274ad9c70..f36e17df73 100644 --- a/misc-utils/lsfd.h +++ b/misc-utils/lsfd.h @@ -56,6 +56,7 @@ enum { COL_COMMAND, COL_DELETED, COL_DEVICE, + COL_DEVNAME, COL_DEV, COL_FD, COL_FLAGS,