mirror of
git://sourceware.org/git/lvm2.git
synced 2025-03-10 16:58:47 +03:00
device: Free cached device bufs when metadata invalid or dev closed.
This commit is contained in:
parent
bd0967a4b1
commit
4d568b709c
6
lib/cache/lvmcache.c
vendored
6
lib/cache/lvmcache.c
vendored
@ -141,6 +141,8 @@ void lvmcache_seed_infos_from_lvmetad(struct cmd_context *cmd)
|
|||||||
/* Volume Group metadata cache functions */
|
/* Volume Group metadata cache functions */
|
||||||
static void _free_cached_vgmetadata(struct lvmcache_vginfo *vginfo)
|
static void _free_cached_vgmetadata(struct lvmcache_vginfo *vginfo)
|
||||||
{
|
{
|
||||||
|
struct lvmcache_info *info;
|
||||||
|
|
||||||
if (!vginfo || !vginfo->vgmetadata)
|
if (!vginfo || !vginfo->vgmetadata)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -154,6 +156,10 @@ static void _free_cached_vgmetadata(struct lvmcache_vginfo *vginfo)
|
|||||||
vginfo->cft = NULL;
|
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);
|
log_debug_cache("lvmcache: VG %s wiped.", vginfo->vgname);
|
||||||
|
|
||||||
release_vg(vginfo->cached_vg);
|
release_vg(vginfo->cached_vg);
|
||||||
|
@ -85,6 +85,9 @@ static void _release_devbuf(struct device_buffer *devbuf)
|
|||||||
|
|
||||||
void devbufs_release(struct device *dev)
|
void devbufs_release(struct device *dev)
|
||||||
{
|
{
|
||||||
|
if ((dev->flags & DEV_REGULAR))
|
||||||
|
return;
|
||||||
|
|
||||||
_release_devbuf(&dev->last_devbuf);
|
_release_devbuf(&dev->last_devbuf);
|
||||||
_release_devbuf(&dev->last_extra_devbuf);
|
_release_devbuf(&dev->last_extra_devbuf);
|
||||||
}
|
}
|
||||||
@ -706,6 +709,7 @@ static void _close(struct device *dev)
|
|||||||
dev->phys_block_size = -1;
|
dev->phys_block_size = -1;
|
||||||
dev->block_size = -1;
|
dev->block_size = -1;
|
||||||
dm_list_del(&dev->open_list);
|
dm_list_del(&dev->open_list);
|
||||||
|
devbufs_release(dev);
|
||||||
|
|
||||||
log_debug_devs("Closed %s", dev_name(dev));
|
log_debug_devs("Closed %s", dev_name(dev));
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user