[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <alpine.LFD.2.00.1105041812040.7938@dhcp-27-109.brq.redhat.com>
Date: Wed, 4 May 2011 18:12:49 +0200 (CEST)
From: Lukas Czerner <lczerner@...hat.com>
To: "Martin K. Petersen" <martin.petersen@...cle.com>
cc: Lukas Czerner <lczerner@...hat.com>, Karel Zak <kzak@...hat.com>,
Christoph Hellwig <hch@...radead.org>,
device-mapper development <dm-devel@...hat.com>,
Alasdair G Kergon <agk@...hat.com>, sandeen@...hat.com,
Mike Snitzer <snitzer@...hat.com>, DarkNovaNick@...il.com,
linux-lvm@...hat.com, linux-ext4@...r.kernel.org
Subject: Re: [dm-devel] do not disable ext4 discards on first discard failure?
[was: Re: dm snapshot: ignore discards issued to the snapshot-origin
target]
On Wed, 4 May 2011, Martin K. Petersen wrote:
> >>>>> "Lukas" == Lukas Czerner <lczerner@...hat.com> writes:
>
> 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:
>
> # lsblk -D
> 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
Very useful indeed!
Thanks!
-Lukas
>
>
> Signed-off-by: Martin K. Petersen <martin.petersen@...cle.com>
>
> diff --git a/misc-utils/lsblk.8 b/misc-utils/lsblk.8
> index 38ff48f..d7d7aa8 100644
> --- a/misc-utils/lsblk.8
> +++ b/misc-utils/lsblk.8
> @@ -29,6 +29,8 @@ Print the SIZE column in bytes rather than in human-readable format.
> .IP "\fB\-d, \-\-nodeps\fP"
> Don't print device holders or slaves. For example "lsblk --nodeps /dev/sda" prints
> information about the sda device only.
> +.IP "\fB\-D, \-\-discard\fP"
> +Print information about the discard (TRIM, UNMAP) capabilities for each device.
> .IP "\fB\-e, \-\-exclude \fIlist\fP
> Exclude the devices specified by a comma-separated \fIlist\fR of major device numbers.
> Note that RAM disks (major=1) are excluded by default.
> diff --git a/misc-utils/lsblk.c b/misc-utils/lsblk.c
> index 38326d0..671e690 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,33 @@ 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 +964,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 +1002,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 +1023,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 +1034,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;
>
--
Powered by blists - more mailing lists