Gitweb:
https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=4d568b709cec5f84c8a...
Commit: 4d568b709cec5f84c8a8a278747b997a75b4c463
Parent: bd0967a4b1ac3dc6402b0e9ad8bc2f85f4f7af1c
Author: Alasdair G Kergon <agk(a)redhat.com>
AuthorDate: Wed Jan 10 12:03:31 2018 +0000
Committer: Alasdair G Kergon <agk(a)redhat.com>
CommitterDate: Wed Jan 10 15:48:03 2018 +0000
device: Free cached device bufs when metadata invalid or dev closed.
---
lib/cache/lvmcache.c | 6 ++++++
lib/device/dev-io.c | 4 ++++
2 files changed, 10 insertions(+), 0 deletions(-)
diff --git a/lib/cache/lvmcache.c b/lib/cache/lvmcache.c
index 53f1c95..017a86b 100644
--- a/lib/cache/lvmcache.c
+++ b/lib/cache/lvmcache.c
@@ -141,6 +141,8 @@ void lvmcache_seed_infos_from_lvmetad(struct cmd_context *cmd)
/* Volume Group metadata cache functions */
static void _free_cached_vgmetadata(struct lvmcache_vginfo *vginfo)
{
+ struct lvmcache_info *info;
+
if (!vginfo || !vginfo->vgmetadata)
return;
@@ -154,6 +156,10 @@ static void _free_cached_vgmetadata(struct lvmcache_vginfo *vginfo)
vginfo->cft = NULL;
}
+ /* Invalidate any cached device buffers */
+ dm_list_iterate_items(info, &vginfo->infos)
+ devbufs_release(info->dev);
+
log_debug_cache("lvmcache: VG %s wiped.", vginfo->vgname);
release_vg(vginfo->cached_vg);
diff --git a/lib/device/dev-io.c b/lib/device/dev-io.c
index 47d3ad9..18a09d1 100644
--- a/lib/device/dev-io.c
+++ b/lib/device/dev-io.c
@@ -85,6 +85,9 @@ static void _release_devbuf(struct device_buffer *devbuf)
void devbufs_release(struct device *dev)
{
+ if ((dev->flags & DEV_REGULAR))
+ return;
+
_release_devbuf(&dev->last_devbuf);
_release_devbuf(&dev->last_extra_devbuf);
}
@@ -706,6 +709,7 @@ static void _close(struct device *dev)
dev->phys_block_size = -1;
dev->block_size = -1;
dm_list_del(&dev->open_list);
+ devbufs_release(dev);
log_debug_devs("Closed %s", dev_name(dev));