diff options
author | Martin K. Petersen | 2011-05-04 17:16:05 +0200 |
---|---|---|
committer | Karel Zak | 2011-05-05 10:09:26 +0200 |
commit | 2d2322461c4e46864b28b572e80836ca54ed2f13 (patch) | |
tree | 7aaef9b3fa63f049f292a7f2455948ee34e25ed1 /misc-utils/lsblk.c | |
parent | lib: [procutils.c]: add missing files. Sorry. (diff) | |
download | kernel-qcow2-util-linux-2d2322461c4e46864b28b572e80836ca54ed2f13.tar.gz kernel-qcow2-util-linux-2d2322461c4e46864b28b572e80836ca54ed2f13.tar.xz kernel-qcow2-util-linux-2d2322461c4e46864b28b572e80836ca54ed2f13.zip |
lsblk: add support for discard topology (-D option)
I got tired of poking around in sysfs to find the discard topology.
Here's a patch against lsblk that adds a -D option to present this
information in a human-readable form:
NAME DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
sda 0 0B 0B 0
└─sda1 0 0B 0B 0
sdb 0 512B 2G 1
└─sdb1 0 512B 2G 1
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'misc-utils/lsblk.c')
-rw-r--r-- | misc-utils/lsblk.c | 47 |
1 files changed, 44 insertions, 3 deletions
diff --git a/misc-utils/lsblk.c b/misc-utils/lsblk.c index 38326d08a..dc4e15aaf 100644 --- a/misc-utils/lsblk.c +++ b/misc-utils/lsblk.c @@ -77,6 +77,10 @@ enum { COL_ROTA, COL_SCHED, COL_TYPE, + COL_DALIGN, + COL_DGRAN, + COL_DMAX, + COL_DZERO, __NCOLUMNS }; @@ -112,8 +116,11 @@ static struct colinfo infos[__NCOLUMNS] = { [COL_PHYSEC] = { "PHY-SEC", 7, TT_FL_RIGHT, N_("physical sector size") }, [COL_LOGSEC] = { "LOG-SEC", 7, TT_FL_RIGHT, N_("logical sector size") }, [COL_SCHED] = { "SCHED", 0.1, 0, N_("I/O scheduler name") }, - [COL_TYPE] = { "TYPE", 4, 0, N_("device type") } - + [COL_TYPE] = { "TYPE", 4, 0, N_("device type") }, + [COL_DALIGN] = { "DISC-ALN", 6, TT_FL_RIGHT, N_("discard alignment offset") }, + [COL_DGRAN] = { "DISC-GRAN", 6, TT_FL_RIGHT, N_("discard granularity") }, + [COL_DMAX] = { "DISC-MAX", 6, TT_FL_RIGHT, N_("discard max bytes") }, + [COL_DZERO] = { "DISC-ZERO", 1, TT_FL_RIGHT, N_("discard zeroes data") }, }; struct lsblk { @@ -702,6 +709,31 @@ static void set_tt_data(struct blkdev_cxt *cxt, int col, int id, struct tt_line if (p) tt_line_set_data(ln, col, p); break; + case COL_DALIGN: + p = sysfs_strdup(cxt, "discard_alignment"); + if (p) + tt_line_set_data(ln, col, p); + break; + case COL_DGRAN: + p = sysfs_strdup(cxt, "queue/discard_granularity"); + if (!lsblk->bytes) + p = size_to_human_string(atoi(p)); + if (p) + tt_line_set_data(ln, col, p); + break; + case COL_DMAX: + p = sysfs_strdup(cxt, "queue/discard_max_bytes"); + + if (!lsblk->bytes) + p = size_to_human_string(atoi(p)); + if (p) + tt_line_set_data(ln, col, p); + break; + case COL_DZERO: + p = sysfs_strdup(cxt, "queue/discard_zeroes_data"); + if (p) + tt_line_set_data(ln, col, p); + break; }; } @@ -930,6 +962,7 @@ static void __attribute__((__noreturn__)) help(FILE *out) " -a, --all print all devices\n" " -b, --bytes print SIZE in bytes rather than in human readable format\n" " -d, --nodeps don't print slaves or holders\n" + " -D, --discard print discard capabilities\n" " -e, --exclude <list> exclude devices by major number (default: RAM disks)\n" " -f, --fs output info about filesystems\n" " -h, --help usage information (this)\n" @@ -967,6 +1000,7 @@ int main(int argc, char *argv[]) { "all", 0, 0, 'a' }, { "bytes", 0, 0, 'b' }, { "nodeps", 0, 0, 'd' }, + { "discard", 0, 0, 'D' }, { "help", 0, 0, 'h' }, { "output", 1, 0, 'o' }, { "perms", 0, 0, 'm' }, @@ -987,7 +1021,7 @@ int main(int argc, char *argv[]) lsblk = &_ls; memset(lsblk, 0, sizeof(*lsblk)); - while((c = getopt_long(argc, argv, "abde:fhlnmo:irt", longopts, NULL)) != -1) { + while((c = getopt_long(argc, argv, "abdDe:fhlnmo:irt", longopts, NULL)) != -1) { switch(c) { case 'a': lsblk->all_devices = 1; @@ -998,6 +1032,13 @@ int main(int argc, char *argv[]) case 'd': lsblk->nodeps = 1; break; + case 'D': + columns[ncolumns++] = COL_NAME; + columns[ncolumns++] = COL_DALIGN; + columns[ncolumns++] = COL_DGRAN; + columns[ncolumns++] = COL_DMAX; + columns[ncolumns++] = COL_DZERO; + break; case 'e': parse_excludes(optarg); break; |