lvm2/0012-dev_manager-use-list-info-for-preset-devs.patch

56 lines
1.8 KiB
Diff

From d4a0816a5824dc375d662e76823ee8ed77bb9983 Mon Sep 17 00:00:00 2001
From: Zdenek Kabelac <zkabelac@redhat.com>
Date: Wed, 16 Feb 2022 00:33:32 +0100
Subject: 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.
---
lib/activate/dev_manager.c | 22 ++++++++++++++--------
1 file changed, 14 insertions(+), 8 deletions(-)
diff --git a/lib/activate/dev_manager.c b/lib/activate/dev_manager.c
index feea06a47e53..63bfd9b74b90 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
--
2.34.1