summaryrefslogtreecommitdiffstats
path: root/misc-utils/lsblk.c
diff options
context:
space:
mode:
authorKarel Zak2018-09-10 10:29:37 +0200
committerKarel Zak2018-09-10 10:31:17 +0200
commit13cbc6f21c0a25a07c7e55ee96f35e51fb7e4387 (patch)
tree1f4dd0d9913d8b9bdf2e35bf105fefa3f1b9a2e1 /misc-utils/lsblk.c
parentscript: be sensitive to another SIGCHLD ssi_codes (diff)
downloadkernel-qcow2-util-linux-13cbc6f21c0a25a07c7e55ee96f35e51fb7e4387.tar.gz
kernel-qcow2-util-linux-13cbc6f21c0a25a07c7e55ee96f35e51fb7e4387.tar.xz
kernel-qcow2-util-linux-13cbc6f21c0a25a07c7e55ee96f35e51fb7e4387.zip
lsblk: prefer MODEL from udev DB
sysfs device model is truncated to 16 characters: > cat /sys/block/sda/device/model Crucial_CT128MX1 > udevadm info --query=property /dev/sda | grep MODEL= ID_MODEL=Crucial_CT128MX100SSD1 sysfs uses INQUARY response which has the 16 characters limitation and udev uses something else. Addresses: https://github.com/karelzak/util-linux/issues/690 Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'misc-utils/lsblk.c')
-rw-r--r--misc-utils/lsblk.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/misc-utils/lsblk.c b/misc-utils/lsblk.c
index 2753375da..396220231 100644
--- a/misc-utils/lsblk.c
+++ b/misc-utils/lsblk.c
@@ -302,6 +302,7 @@ struct blkdev_cxt {
char *partflags; /* partition flags */
char *wwn; /* storage WWN */
char *serial; /* disk serial number */
+ char *model; /* disk model */
int npartitions; /* # of partitions this device has */
int nholders; /* # of devices mapped directly to this device
@@ -412,6 +413,7 @@ static void reset_blkdev_cxt(struct blkdev_cxt *cxt)
free(cxt->partlabel);
free(cxt->wwn);
free(cxt->serial);
+ free(cxt->model);
ul_unref_path(cxt->sysfs);
@@ -603,6 +605,9 @@ static int get_udev_properties(struct blkdev_cxt *cxt)
if ((data = udev_device_get_property_value(dev, "ID_SERIAL_SHORT")))
cxt->serial = xstrdup(data);
+ if ((data = udev_device_get_property_value(dev, "ID_MODEL")))
+ cxt->model = xstrdup(data);
+
udev_device_unref(dev);
cxt->probed = 1;
DBG(DEV, ul_debugobj(cxt, "%s: found udev properties", cxt->name));
@@ -1064,8 +1069,13 @@ static void set_scols_data(struct blkdev_cxt *cxt, int col, int id, struct libsc
ul_path_read_string(cxt->sysfs, &str, "queue/add_random");
break;
case COL_MODEL:
- if (!cxt->partition && cxt->nslaves == 0)
- ul_path_read_string(cxt->sysfs, &str, "device/model");
+ if (!cxt->partition && cxt->nslaves == 0) {
+ get_udev_properties(cxt);
+ if (cxt->model)
+ str = xstrdup(cxt->model);
+ else
+ ul_path_read_string(cxt->sysfs, &str, "device/model");
+ }
break;
case COL_SERIAL:
if (!cxt->partition && cxt->nslaves == 0) {