summaryrefslogtreecommitdiff
path: root/lib/activate
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2022-02-16 00:33:32 +0100
committerZdenek Kabelac <zkabelac@redhat.com>2022-02-16 01:00:36 +0100
commitd4a0816a5824dc375d662e76823ee8ed77bb9983 (patch)
treee136156c82e1c6b6e4e83b2ced671bfada826930 /lib/activate
parentfa7b67eeebfc28bce355991eebe1b5f21f075e9a (diff)
downloadlvm2-d4a0816a5824dc375d662e76823ee8ed77bb9983.tar.gz
dev_manager: use list info for preset devs
In some cases we can also use cached info obtained from DM_DEVICE_LIST also to avoid extra ioctl check for present devices.
Diffstat (limited to 'lib/activate')
-rw-r--r--lib/activate/dev_manager.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/lib/activate/dev_manager.c b/lib/activate/dev_manager.c
index feea06a47..63bfd9b74 100644
--- a/lib/activate/dev_manager.c
+++ b/lib/activate/dev_manager.c
@@ -2254,6 +2254,7 @@ static int _add_dev_to_dtree(struct dev_manager *dm, struct dm_tree *dtree,
{
char *dlid, *name;
struct dm_info info, info2;
+ const struct dm_active_device *dev;
if (!(name = dm_build_dm_name(dm->mem, lv->vg->name, lv->name, layer)))
return_0;
@@ -2262,15 +2263,20 @@ static int _add_dev_to_dtree(struct dev_manager *dm, struct dm_tree *dtree,
return_0;
if (!dm->cmd->disable_dm_devs &&
- dm->cmd->cache_dm_devs &&
- !dm_device_list_find_by_uuid(dm->cmd->cache_dm_devs, dlid, NULL)) {
- log_debug("Cached as not present %s.", name);
- return 1;
- }
-
- if (!_info(dm->cmd, name, dlid, 0, 0, 0, &info, NULL, NULL))
+ dm->cmd->cache_dm_devs) {
+ if (!dm_device_list_find_by_uuid(dm->cmd->cache_dm_devs, dlid, &dev)) {
+ log_debug("Cached as not present %s.", name);
+ return 1;
+ }
+ info = (struct dm_info) {
+ .exists = 1,
+ .major = dev->major,
+ .minor = dev->minor,
+ };
+ log_debug("Cached as present %s %s (%d:%d).",
+ name, dlid, info.major, info.minor);
+ } else if (!_info(dm->cmd, name, dlid, 0, 0, 0, &info, NULL, NULL))
return_0;
-
/*
* For top level volumes verify that existing device match
* requested major/minor and that major/minor pair is available for use