diff options
author | Karel Zak | 2018-09-10 10:29:37 +0200 |
---|---|---|
committer | Karel Zak | 2018-09-10 10:31:17 +0200 |
commit | 13cbc6f21c0a25a07c7e55ee96f35e51fb7e4387 (patch) | |
tree | 1f4dd0d9913d8b9bdf2e35bf105fefa3f1b9a2e1 /misc-utils/lsblk.c | |
parent | script: be sensitive to another SIGCHLD ssi_codes (diff) | |
download | kernel-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.c | 14 |
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) { |