mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-02 01:18:26 +03:00
When asked to drop cached committed VG metadata, invalidate cached PV labels.
This commit is contained in:
parent
d9c0105fef
commit
3835ad6b1c
@ -5,6 +5,7 @@ Version 2.02.38 -
|
|||||||
|
|
||||||
Version 2.02.37 -
|
Version 2.02.37 -
|
||||||
=================================
|
=================================
|
||||||
|
When asked to drop cached committed VG metadata, invalidate cached PV labels.
|
||||||
Drop metadata cache before writing precommitted metadata instead of after.
|
Drop metadata cache before writing precommitted metadata instead of after.
|
||||||
Don't touch /dev in vgrename if activation is disabled.
|
Don't touch /dev in vgrename if activation is disabled.
|
||||||
|
|
||||||
|
28
lib/cache/lvmcache.c
vendored
28
lib/cache/lvmcache.c
vendored
@ -22,6 +22,9 @@
|
|||||||
#include "filter.h"
|
#include "filter.h"
|
||||||
#include "memlock.h"
|
#include "memlock.h"
|
||||||
#include "str_list.h"
|
#include "str_list.h"
|
||||||
|
#include "format-text.h"
|
||||||
|
#include "format_pool.h"
|
||||||
|
#include "format1.h"
|
||||||
|
|
||||||
static struct dm_hash_table *_pvid_hash = NULL;
|
static struct dm_hash_table *_pvid_hash = NULL;
|
||||||
static struct dm_hash_table *_vgid_hash = NULL;
|
static struct dm_hash_table *_vgid_hash = NULL;
|
||||||
@ -130,16 +133,39 @@ static void _update_cache_lock_state(const char *vgname, int locked)
|
|||||||
_update_cache_vginfo_lock_state(vginfo, locked);
|
_update_cache_vginfo_lock_state(vginfo, locked);
|
||||||
}
|
}
|
||||||
|
|
||||||
void lvmcache_drop_metadata(const char *vgname)
|
static void _drop_metadata(const char *vgname)
|
||||||
{
|
{
|
||||||
struct lvmcache_vginfo *vginfo;
|
struct lvmcache_vginfo *vginfo;
|
||||||
|
struct lvmcache_info *info;
|
||||||
|
|
||||||
if (!(vginfo = vginfo_from_vgname(vgname, NULL)))
|
if (!(vginfo = vginfo_from_vgname(vgname, NULL)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Invalidate cached PV labels.
|
||||||
|
* If cached precommitted metadata exists that means we
|
||||||
|
* already invalidated the PV labels (before caching it)
|
||||||
|
* and we must not do it again.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!vginfo->precommitted)
|
||||||
|
list_iterate_items(info, &vginfo->infos)
|
||||||
|
info->status |= CACHE_INVALID;
|
||||||
|
|
||||||
_free_cached_vgmetadata(vginfo);
|
_free_cached_vgmetadata(vginfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void lvmcache_drop_metadata(const char *vgname)
|
||||||
|
{
|
||||||
|
/* For VG_ORPHANS, we need to invalidate all labels on orphan PVs. */
|
||||||
|
if (strcmp(vgname, VG_ORPHANS)) {
|
||||||
|
_drop_metadata(FMT_TEXT_ORPHAN_VG_NAME);
|
||||||
|
_drop_metadata(FMT_LVM1_ORPHAN_VG_NAME);
|
||||||
|
_drop_metadata(FMT_POOL_ORPHAN_VG_NAME);
|
||||||
|
} else
|
||||||
|
_drop_metadata(vgname);
|
||||||
|
}
|
||||||
|
|
||||||
void lvmcache_lock_vgname(const char *vgname, int read_only __attribute((unused)))
|
void lvmcache_lock_vgname(const char *vgname, int read_only __attribute((unused)))
|
||||||
{
|
{
|
||||||
if (!_lock_hash && !lvmcache_init()) {
|
if (!_lock_hash && !lvmcache_init()) {
|
||||||
|
Loading…
Reference in New Issue
Block a user