From: Jan Fajerski Date: Wed, 21 Nov 2018 12:14:25 +0000 (+0100) Subject: common/blkdev: use ID_MODEL + _ + ID_SERIAL_SHORT for device_id X-Git-Tag: v14.1.0~748^2~2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=46835c2c0679f99e57134f8c02edd43b0ff5c3a4;p=ceph-ci.git common/blkdev: use ID_MODEL + _ + ID_SERIAL_SHORT for device_id This is hopefully more stable then using ID_SERIAL. While often ID_SERIAL contains the model name and serial, in some cases it only contains something close to the actual serial number. Signed-off-by: Jan Fajerski --- diff --git a/src/common/blkdev.cc b/src/common/blkdev.cc index 8ddffda55f0..9af1866ac39 100644 --- a/src/common/blkdev.cc +++ b/src/common/blkdev.cc @@ -397,6 +397,7 @@ std::string get_device_id(const std::string& devname) struct udev_device *dev; static struct udev *udev; const char *data; + std::string device_model; std::string device_id; udev = udev_new(); @@ -409,9 +410,14 @@ std::string get_device_id(const std::string& devname) return {}; } + data = udev_device_get_property_value(dev, "ID_MODEL"); + if (data) { + device_model = data; + } + // "ID_SERIAL_SHORT" returns only the serial number; - // "ID_SERIAL" returns vendor model_serial. - data = udev_device_get_property_value(dev, "ID_SERIAL"); + // "ID_SERIAL" returns vendor model_serial but can be unreliable and return. + data = udev_device_get_property_value(dev, "ID_SERIAL_SHORT"); if (data) { device_id = data; } @@ -419,9 +425,10 @@ std::string get_device_id(const std::string& devname) udev_device_unref(dev); udev_unref(udev); - if (!device_id.empty()) { + if (!device_id.empty() and !device_model.empty()) { + std::replace(device_model.begin(), device_model.end(), ' ', '_'); std::replace(device_id.begin(), device_id.end(), ' ', '_'); - return device_id; + return device_model + '_' + device_id; } // either udev_device_get_property_value() failed, or succeeded but