mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-03 05:18:29 +03:00
mirror: fix flushing for mirror target
Fix regression caused by commitba41ee1dc9
. The idea was to use no_flush for changed device only for thin volumes and thin pools but also to merge this with change made in commit844b009584
. However the resulting condition has caused misbehavior for the mirror suspend - as that has been before the ONLY allowed target type that could have been suspended with noflush. Result was badly working repair for --type mirror that has been passing 'flush' to the repaired mirror target whenever preload wrongly set flush_required. The origin code has required the flush_required to be set whenever deivce size is changed. Now it first detects if device size got smaller 'dm_tree_node_size_changed(root) < 0' - this requires flush. Otherwise it checks device is not thin volume nor thin pool and its size has changed (got bigger) and requires flush. This mean upsize of thin-pool or thin volume will not require flush.
This commit is contained in:
parent
76fc41fb9d
commit
d4c03cf7b2
@ -3044,12 +3044,11 @@ static int _tree_action(struct dev_manager *dm, const struct logical_volume *lv,
|
||||
|
||||
if ((dm_tree_node_size_changed(root) < 0))
|
||||
dm->flush_required = 1;
|
||||
|
||||
/* Currently keep the code require flush for any
|
||||
* non 'thin pool/volume, mirror' or with any size change */
|
||||
if (!lv_is_thin_volume(lv) &&
|
||||
!lv_is_thin_pool(lv) &&
|
||||
(!lv_is_mirror(lv) || dm_tree_node_size_changed(root)))
|
||||
* non 'thin pool/volume' and size increase */
|
||||
else if (!lv_is_thin_volume(lv) &&
|
||||
!lv_is_thin_pool(lv) &&
|
||||
dm_tree_node_size_changed(root))
|
||||
dm->flush_required = 1;
|
||||
|
||||
if (action == ACTIVATE) {
|
||||
|
Loading…
Reference in New Issue
Block a user