1
0
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:
Alasdair Kergon 2008-05-08 18:28:27 +00:00
parent d9c0105fef
commit 3835ad6b1c
2 changed files with 28 additions and 1 deletions

View File

@ -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
View File

@ -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()) {