mirror of
git://sourceware.org/git/lvm2.git
synced 2025-03-10 16:58:47 +03:00
cache: Retain orphans while global lock held.
Fixes segfault when 'pvs' encounters two different PVs sharing the same uuid but one an orphan, the other in a VG. If VG_GLOBAL is held, there seems no point in doing a full scan more than once. If undesirable side-effects show up, we can try restricting this to VG_GLOBAL READ locks. The original code dates back to 2.02.40.
This commit is contained in:
parent
32a6c11877
commit
80f4b4b803
@ -1,5 +1,6 @@
|
|||||||
Version 2.02.118 -
|
Version 2.02.118 -
|
||||||
=================================
|
=================================
|
||||||
|
Don't invalidate cached orphan information while global lock is held.
|
||||||
Avoid rescan of all devices when requested pvscan for removed device.
|
Avoid rescan of all devices when requested pvscan for removed device.
|
||||||
Measure configuration timestamps with nanoseconds when available.
|
Measure configuration timestamps with nanoseconds when available.
|
||||||
Disable lvchange of major and minor of pool LVs.
|
Disable lvchange of major and minor of pool LVs.
|
||||||
|
5
lib/cache/lvmcache.c
vendored
5
lib/cache/lvmcache.c
vendored
@ -285,6 +285,9 @@ void lvmcache_commit_metadata(const char *vgname)
|
|||||||
|
|
||||||
void lvmcache_drop_metadata(const char *vgname, int drop_precommitted)
|
void lvmcache_drop_metadata(const char *vgname, int drop_precommitted)
|
||||||
{
|
{
|
||||||
|
if (lvmcache_vgname_is_locked(VG_GLOBAL))
|
||||||
|
return;
|
||||||
|
|
||||||
/* For VG_ORPHANS, we need to invalidate all labels on orphan PVs. */
|
/* For VG_ORPHANS, we need to invalidate all labels on orphan PVs. */
|
||||||
if (!strcmp(vgname, VG_ORPHANS)) {
|
if (!strcmp(vgname, VG_ORPHANS)) {
|
||||||
_drop_metadata(FMT_TEXT_ORPHAN_VG_NAME, 0);
|
_drop_metadata(FMT_TEXT_ORPHAN_VG_NAME, 0);
|
||||||
@ -293,7 +296,7 @@ void lvmcache_drop_metadata(const char *vgname, int drop_precommitted)
|
|||||||
|
|
||||||
/* Indicate that PVs could now be missing from the cache */
|
/* Indicate that PVs could now be missing from the cache */
|
||||||
init_full_scan_done(0);
|
init_full_scan_done(0);
|
||||||
} else if (!lvmcache_vgname_is_locked(VG_GLOBAL))
|
} else
|
||||||
_drop_metadata(vgname, drop_precommitted);
|
_drop_metadata(vgname, drop_precommitted);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user