mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-03 05:18:29 +03:00
lockd: disable part of lock_args validation
There are at least a couple instances where the lock_args check does not work correctly, (listed in the comment), so disable the NULL check for lock_args until those are resolved.
This commit is contained in:
parent
738ae4a77f
commit
0823511262
@ -2444,15 +2444,52 @@ out:
|
|||||||
|
|
||||||
int lockd_lv_uses_lock(struct logical_volume *lv)
|
int lockd_lv_uses_lock(struct logical_volume *lv)
|
||||||
{
|
{
|
||||||
if (!lv_is_visible(lv) ||
|
if (lv_is_thin_volume(lv))
|
||||||
lv_is_thin_volume(lv) ||
|
|
||||||
lv_is_thin_pool_data(lv) ||
|
|
||||||
lv_is_thin_pool_metadata(lv) ||
|
|
||||||
lv_is_pool_metadata_spare(lv) ||
|
|
||||||
lv_is_cache_pool(lv) ||
|
|
||||||
lv_is_cache_pool_data(lv) ||
|
|
||||||
lv_is_cache_pool_metadata(lv) ||
|
|
||||||
lv_is_lockd_sanlock_lv(lv))
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (lv_is_thin_pool_data(lv))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (lv_is_thin_pool_metadata(lv))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (lv_is_pool_metadata_spare(lv))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (lv_is_cache_pool(lv))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (lv_is_cache_pool_data(lv))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (lv_is_cache_pool_metadata(lv))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (lv_is_cow(lv))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (lv->status & SNAPSHOT)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* FIXME: lv_is_virtual_origin ? */
|
||||||
|
|
||||||
|
if (lv_is_lockd_sanlock_lv(lv))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (lv_is_mirror_image(lv))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (lv_is_mirror_log(lv))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (lv_is_raid_image(lv))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (lv_is_raid_metadata(lv))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (!lv_is_visible(lv))
|
||||||
|
return 0;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -2899,7 +2899,7 @@ int vg_validate(struct volume_group *vg)
|
|||||||
r = 0;
|
r = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!vg->skip_validate_lock_args && !_validate_vg_lock_args(vg))
|
if (!_validate_vg_lock_args(vg))
|
||||||
r = 0;
|
r = 0;
|
||||||
} else {
|
} else {
|
||||||
if (vg->lock_args) {
|
if (vg->lock_args) {
|
||||||
@ -2915,10 +2915,44 @@ int vg_validate(struct volume_group *vg)
|
|||||||
if (vg->skip_validate_lock_args)
|
if (vg->skip_validate_lock_args)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* FIXME: make missing lock_args an error.
|
||||||
|
* There are at least two cases where this
|
||||||
|
* check doesn't work correctly:
|
||||||
|
*
|
||||||
|
* 1. When creating a cow snapshot,
|
||||||
|
* (lvcreate -s -L1M -n snap1 vg/lv1),
|
||||||
|
* lockd_lv_uses_lock() uses lv_is_cow()
|
||||||
|
* which depends on lv->snapshot being
|
||||||
|
* set, but it's not set at this point,
|
||||||
|
* so lockd_lv_uses_lock() cannot identify
|
||||||
|
* the LV as a cow_lv, and thinks it needs
|
||||||
|
* a lock when it doesn't. To fix this we
|
||||||
|
* probably need to validate by finding the
|
||||||
|
* origin LV, then finding all its snapshots
|
||||||
|
* which will have no lock_args.
|
||||||
|
*
|
||||||
|
* 2. When converting an LV to a thin pool
|
||||||
|
* without using an existing metadata LV,
|
||||||
|
* (lvconvert --type thin-pool vg/poolX),
|
||||||
|
* there is an intermediate LV created,
|
||||||
|
* probably for the metadata LV, and
|
||||||
|
* validate is called on the VG in this
|
||||||
|
* intermediate state, which finds the
|
||||||
|
* newly created LV which is not yet
|
||||||
|
* identified as a metadata LV, and
|
||||||
|
* does not have any lock_args. To fix
|
||||||
|
* this we might be able to find the place
|
||||||
|
* where the intermediate LV is created,
|
||||||
|
* and set new variable on it like for vgs,
|
||||||
|
* lv->skip_validate_lock_args.
|
||||||
|
*/
|
||||||
if (!lvl->lv->lock_args) {
|
if (!lvl->lv->lock_args) {
|
||||||
log_error(INTERNAL_ERROR "LV %s/%s missing lock_args",
|
/*
|
||||||
vg->name, lvl->lv->name);
|
log_verbose("LV %s/%s missing lock_args",
|
||||||
|
vg->name, lvl->lv->name);
|
||||||
r = 0;
|
r = 0;
|
||||||
|
*/
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user