mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-03 05:18:29 +03:00
Avoid spurious duplicate VG messages referring to VGs that are gone.
(untested)
This commit is contained in:
parent
b947f34393
commit
bdce11cb30
@ -6,6 +6,9 @@ Version 2.02.38 -
|
|||||||
|
|
||||||
Version 2.02.37 -
|
Version 2.02.37 -
|
||||||
=================================
|
=================================
|
||||||
|
Avoid spurious duplicate VG messages referring to VGs that are gone.
|
||||||
|
Drop dev_name_confirmed error message to debug level.
|
||||||
|
Fix setpriority error message to signed int.
|
||||||
Temporarily disable dmeventd mirror monitoring during lvchange --resync.
|
Temporarily disable dmeventd mirror monitoring during lvchange --resync.
|
||||||
Refactor some vginfo manipulation code.
|
Refactor some vginfo manipulation code.
|
||||||
Add assertions to trap deprecated P_ and V_ lock usage.
|
Add assertions to trap deprecated P_ and V_ lock usage.
|
||||||
|
53
lib/cache/lvmcache.c
vendored
53
lib/cache/lvmcache.c
vendored
@ -31,6 +31,7 @@ static struct dm_hash_table *_vgid_hash = NULL;
|
|||||||
static struct dm_hash_table *_vgname_hash = NULL;
|
static struct dm_hash_table *_vgname_hash = NULL;
|
||||||
static struct dm_hash_table *_lock_hash = NULL;
|
static struct dm_hash_table *_lock_hash = NULL;
|
||||||
static struct list _vginfos;
|
static struct list _vginfos;
|
||||||
|
static int _scanning_in_progress = 0;
|
||||||
static int _has_scanned = 0;
|
static int _has_scanned = 0;
|
||||||
static int _vgs_locked = 0;
|
static int _vgs_locked = 0;
|
||||||
static int _vg_global_lock_held = 0; /* Global lock held when cache wiped? */
|
static int _vg_global_lock_held = 0; /* Global lock held when cache wiped? */
|
||||||
@ -220,6 +221,9 @@ int vgs_locked(void)
|
|||||||
static void _vginfo_attach_info(struct lvmcache_vginfo *vginfo,
|
static void _vginfo_attach_info(struct lvmcache_vginfo *vginfo,
|
||||||
struct lvmcache_info *info)
|
struct lvmcache_info *info)
|
||||||
{
|
{
|
||||||
|
if (!vginfo)
|
||||||
|
return;
|
||||||
|
|
||||||
info->vginfo = vginfo;
|
info->vginfo = vginfo;
|
||||||
list_add(&vginfo->infos, &info->list);
|
list_add(&vginfo->infos, &info->list);
|
||||||
}
|
}
|
||||||
@ -361,6 +365,18 @@ static int _vginfo_is_valid(struct lvmcache_vginfo *vginfo)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* vginfo is invalid if it does not contain at least one valid info */
|
||||||
|
static int _vginfo_is_invalid(struct lvmcache_vginfo *vginfo)
|
||||||
|
{
|
||||||
|
struct lvmcache_info *info;
|
||||||
|
|
||||||
|
list_iterate_items(info, &vginfo->infos)
|
||||||
|
if (_info_is_valid(info))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If valid_only is set, data will only be returned if the cached data is
|
* If valid_only is set, data will only be returned if the cached data is
|
||||||
* known still to be valid.
|
* known still to be valid.
|
||||||
@ -407,7 +423,6 @@ int lvmcache_label_scan(struct cmd_context *cmd, int full_scan)
|
|||||||
struct device *dev;
|
struct device *dev;
|
||||||
struct format_type *fmt;
|
struct format_type *fmt;
|
||||||
|
|
||||||
static int _scanning_in_progress = 0;
|
|
||||||
int r = 0;
|
int r = 0;
|
||||||
|
|
||||||
/* Avoid recursion when a PVID can't be found! */
|
/* Avoid recursion when a PVID can't be found! */
|
||||||
@ -604,12 +619,14 @@ static int _free_vginfo(struct lvmcache_vginfo *vginfo)
|
|||||||
|
|
||||||
_free_cached_vgmetadata(vginfo);
|
_free_cached_vgmetadata(vginfo);
|
||||||
|
|
||||||
dm_hash_remove(_vgname_hash, vginfo->vgname);
|
if (vginfo_from_vgname(vginfo->vgname, NULL) == vginfo) {
|
||||||
if (vginfo->next && !dm_hash_insert(_vgname_hash, vginfo->vgname,
|
dm_hash_remove(_vgname_hash, vginfo->vgname);
|
||||||
vginfo->next)) {
|
if (vginfo->next && !dm_hash_insert(_vgname_hash, vginfo->vgname,
|
||||||
log_error("_vgname_hash re-insertion for %s failed",
|
vginfo->next)) {
|
||||||
vginfo->vgname);
|
log_error("_vgname_hash re-insertion for %s failed",
|
||||||
r = 0;
|
vginfo->vgname);
|
||||||
|
r = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vginfo->vgname)
|
if (vginfo->vgname)
|
||||||
@ -801,7 +818,8 @@ static int _lvmcache_update_vgname(struct lvmcache_info *info,
|
|||||||
uint32_t vgstatus, const char *creation_host,
|
uint32_t vgstatus, const char *creation_host,
|
||||||
const struct format_type *fmt)
|
const struct format_type *fmt)
|
||||||
{
|
{
|
||||||
struct lvmcache_vginfo *vginfo, *primary_vginfo;
|
struct lvmcache_vginfo *vginfo, *primary_vginfo, *orphan_vginfo;
|
||||||
|
struct lvmcache_info *info2, *info3;
|
||||||
// struct lvmcache_vginfo *old_vginfo, *next;
|
// struct lvmcache_vginfo *old_vginfo, *next;
|
||||||
|
|
||||||
if (!vgname || (info && info->vginfo && !strcmp(info->vginfo->vgname, vgname)))
|
if (!vgname || (info && info->vginfo && !strcmp(info->vginfo->vgname, vgname)))
|
||||||
@ -860,7 +878,24 @@ static int _lvmcache_update_vgname(struct lvmcache_info *info,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
list_init(&vginfo->infos);
|
list_init(&vginfo->infos);
|
||||||
primary_vginfo = vginfo_from_vgname(vgname, NULL);
|
|
||||||
|
/*
|
||||||
|
* If we're scanning and there's an invalidated entry, remove it.
|
||||||
|
* Otherwise we risk bogus warnings of duplicate VGs.
|
||||||
|
*/
|
||||||
|
while ((primary_vginfo = vginfo_from_vgname(vgname, NULL)) &&
|
||||||
|
_scanning_in_progress && _vginfo_is_invalid(primary_vginfo))
|
||||||
|
list_iterate_items_safe(info2, info3, &primary_vginfo->infos) {
|
||||||
|
orphan_vginfo = vginfo_from_vgname(primary_vginfo->fmt->orphan_vg_name, NULL);
|
||||||
|
_drop_vginfo(info2, primary_vginfo);
|
||||||
|
_vginfo_attach_info(orphan_vginfo, info2);
|
||||||
|
log_debug("lvmcache: %s: now in VG %s%s%s%s",
|
||||||
|
dev_name(info2->dev),
|
||||||
|
vgname, orphan_vginfo->vgid[0] ? " (" : "",
|
||||||
|
orphan_vginfo->vgid[0] ? orphan_vginfo->vgid : "",
|
||||||
|
orphan_vginfo->vgid[0] ? ")" : "");
|
||||||
|
}
|
||||||
|
|
||||||
if (!_insert_vginfo(vginfo, vgid, vgstatus, creation_host,
|
if (!_insert_vginfo(vginfo, vgid, vgstatus, creation_host,
|
||||||
primary_vginfo)) {
|
primary_vginfo)) {
|
||||||
dm_free(vginfo->vgname);
|
dm_free(vginfo->vgname);
|
||||||
|
@ -687,7 +687,8 @@ const char *dev_name_confirmed(struct device *dev, int quiet)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
log_error("Aborting - please provide new pathname for what "
|
/* Scanning issues this inappropriately sometimes. */
|
||||||
|
log_debug("Aborting - please provide new pathname for what "
|
||||||
"used to be %s", name);
|
"used to be %s", name);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user