lsblk: Improve discard support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Use atol() instead of atoi() when extracting discard_max_bytes.

Only print discard_alignment and discard_zeroes_data if the device
supports discard. This prevents printing of undefined values with older
kernels.

Signed-off-by: Martin K. Petersen <martin.petersen@xxxxxxxxxx>

diff --git a/misc-utils/lsblk.c b/misc-utils/lsblk.c
index 2110113..e4f2cde 100644
--- a/misc-utils/lsblk.c
+++ b/misc-utils/lsblk.c
@@ -160,6 +160,7 @@ struct blkdev_cxt {
 				 * /sys/block/.../holders + number of partition */
 	int nslaves;		/* # of devices this device maps to */
 	int maj, min;		/* devno */
+	int discard;		/* supports discard */
 
 	uint64_t size;		/* device size */
 };
@@ -712,8 +713,10 @@ static void set_tt_data(struct blkdev_cxt *cxt, int col, int id, struct tt_line
 		break;
 	case COL_DALIGN:
 		p = sysfs_strdup(cxt, "discard_alignment");
-		if (p)
+		if (cxt->discard && p)
 			tt_line_set_data(ln, col, p);
+		else
+			tt_line_set_data(ln, col, "0");
 		break;
 	case COL_DGRAN:
 		p = sysfs_strdup(cxt, "queue/discard_granularity");
@@ -726,14 +729,16 @@ static void set_tt_data(struct blkdev_cxt *cxt, int col, int id, struct tt_line
 		p = sysfs_strdup(cxt, "queue/discard_max_bytes");
 
 		if (!lsblk->bytes)
-			p = size_to_human_string(atoi(p));
+			p = size_to_human_string(atol(p));
 		if (p)
 			tt_line_set_data(ln, col, p);
 		break;
 	case COL_DZERO:
 		p = sysfs_strdup(cxt, "queue/discard_zeroes_data");
-		if (p)
+		if (cxt->discard && p)
 			tt_line_set_data(ln, col, p);
+		else
+			tt_line_set_data(ln, col, "0");
 		break;
 	};
 }
@@ -772,6 +777,7 @@ static int set_cxt(struct blkdev_cxt *cxt,
 		return -1;
 
 	cxt->size = sysfs_read_u64(cxt, "size") << 9;
+	cxt->discard = sysfs_read_int(cxt, "queue/discard_granularity");
 
 	/* Ignore devices of zero size */
 	if (!lsblk->all_devices && cxt->size == 0)
--
To unsubscribe from this list: send the line "unsubscribe util-linux" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux