summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2019-09-30 13:22:42 +0200
committerZdenek Kabelac <zkabelac@redhat.com>2019-09-30 13:34:34 +0200
commitc813db8fc2ec15a8370bb291f662e15ba26682e8 (patch)
tree239add7c13f9fb1b8b3382ebbea499d4d9b6a302
parentfd5b8b72da79e2f0a10785d055a27643d9eaaf19 (diff)
downloadlvm2-c813db8fc2ec15a8370bb291f662e15ba26682e8.tar.gz
vdo: deactivate forgotten vdo pool
If the linear mapping is lost (for whatever reason, i.e. test suite forcible 'dmsetup remove' linear LV, lvm2 had hard times figuring out how to deactivate such DM table. So add function which is in case inactive VDO pool LV checks if the pool is actually still active (-vpool device present) and it has open count == 0. In this case deactivation is allowed to continue and cleanup DM table.
-rw-r--r--lib/activate/activate.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/lib/activate/activate.c b/lib/activate/activate.c
index 29cd2d3aa..258881633 100644
--- a/lib/activate/activate.c
+++ b/lib/activate/activate.c
@@ -2434,6 +2434,17 @@ int lv_deactivate(struct cmd_context *cmd, const char *lvid_s, const struct logi
}
}
+ if (lv_is_vdo_pool(lv)) {
+ /* If someone has remove 'linear' mapping over VDO device
+ * we may still be able to deactivate the rest of the tree
+ * i.e. in test-suite we simulate this via 'dmsetup remove' */
+ if (!lv_info(cmd, lv, 1, &info, 1, 0))
+ goto_out;
+
+ if (info.exists && !info.open_count)
+ r = 0; /* Unused VDO device left in table? */
+ }
+
if (r)
goto out;
}