From: Karel Zak Date: Mon, 10 Sep 2018 08:29:37 +0000 (+0200) Subject: lsblk: prefer MODEL from udev DB X-Git-Tag: v2.33-rc1~29 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=13cbc6f21c0a25a07c7e55ee96f35e51fb7e4387;p=thirdparty%2Futil-linux.git 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 --- diff --git a/misc-utils/lsblk.c b/misc-utils/lsblk.c index 2753375da5..396220231a 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) {