diff options
author | Peter Rajnoha <prajnoha@redhat.com> | 2016-04-01 10:09:03 +0200 |
---|---|---|
committer | Peter Rajnoha <prajnoha@redhat.com> | 2016-04-01 14:48:56 +0200 |
commit | 7ed5a65ee5ccb92de388977cff0dc697045ffc09 (patch) | |
tree | 6bdfdc6ddab70492a77ac087540f867eaadb5fe9 | |
parent | 91d32f9d1ba1ff3bed0f47104721e97960df3878 (diff) | |
download | lvm2-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.c | 18 |
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); |