summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Rajnoha <prajnoha@redhat.com>2016-04-01 10:09:03 +0200
committerPeter Rajnoha <prajnoha@redhat.com>2016-04-01 14:48:56 +0200
commit7ed5a65ee5ccb92de388977cff0dc697045ffc09 (patch)
tree6bdfdc6ddab70492a77ac087540f867eaadb5fe9
parent91d32f9d1ba1ff3bed0f47104721e97960df3878 (diff)
downloadlvm2-7ed5a65ee5ccb92de388977cff0dc697045ffc09.tar.gz
dev-cache: also add dev name for device found in sysfs only
For the case when we print device name associated with struct device that was not found in /dev, but in sysfs, for example when printing devices where LV device mismatch is found.
-rw-r--r--lib/device/dev-cache.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/device/dev-cache.c b/lib/device/dev-cache.c
index 12dccebc2..27540d968 100644
--- a/lib/device/dev-cache.c
+++ b/lib/device/dev-cache.c
@@ -433,11 +433,29 @@ static struct dm_list *_get_or_add_list_by_index_key(struct dm_hash_table *idx,
static struct device *_insert_sysfs_dev(dev_t devno, const char *devname)
{
+ char path[PATH_MAX];
+ char *path_copy;
struct device *dev;
+ if (dm_snprintf(path, sizeof(path), "%s%s", _cache.dev_dir, devname) < 0) {
+ log_error("_insert_sysfs_dev: %s: dm_snprintf failed", devname);
+ return NULL;
+ }
+
if (!(dev = _dev_create(devno)))
return_NULL;
+ if (!(path_copy = dm_pool_strdup(_cache.mem, path))) {
+ log_error("_insert_sysfs_dev: %s: dm_pool_strdup failed", devname);
+ return NULL;
+ }
+
+ if (!_add_alias(dev, path_copy)) {
+ log_error("Couldn't add alias to dev cache.");
+ _free(dev);
+ return NULL;
+ }
+
if (!btree_insert(_cache.sysfs_only_devices, (uint32_t) devno, dev)) {
log_error("Couldn't add device to binary tree of sysfs-only devices in dev cache.");
_free(dev);