mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-03 05:18:29 +03:00
activation: avoid rechecking pvmove node
Use new 3rd. state of trace_pvmove_deps == 2. In this state we know, we have already seen the node and can skip futher testing. Remainging value 1 signals we want to track, and value 0 is for ignoring tracking, but node is still checking in this case. Reduces large amount of duplicate ioctl queries.
This commit is contained in:
parent
e4db42e476
commit
7e794b7748
@ -2059,6 +2059,9 @@ static int _add_lv_to_dtree(struct dev_manager *dm, struct dm_tree *dtree,
|
||||
const char *uuid;
|
||||
const struct logical_volume *plv;
|
||||
|
||||
if (lv_is_pvmove(lv) && (dm->track_pvmove_deps == 2))
|
||||
return 1; /* Avoid rechecking of already seen pvmove LV */
|
||||
|
||||
if (lv_is_cache_pool(lv)) {
|
||||
if (!dm_list_empty(&lv->segs_using_this_lv)) {
|
||||
if (!_add_lv_to_dtree(dm, dtree, seg_lv(first_seg(lv), 0), 0))
|
||||
@ -2178,8 +2181,8 @@ static int _add_lv_to_dtree(struct dev_manager *dm, struct dm_tree *dtree,
|
||||
return_0;
|
||||
|
||||
/* Add any LVs referencing a PVMOVE LV unless told not to. */
|
||||
if (dm->track_pvmove_deps && lv_is_pvmove(lv)) {
|
||||
dm->track_pvmove_deps = 0;
|
||||
if ((dm->track_pvmove_deps == 1) && lv_is_pvmove(lv)) {
|
||||
dm->track_pvmove_deps = 2; /* Mark as already seen */
|
||||
dm_list_iterate_items(sl, &lv->segs_using_this_lv) {
|
||||
/* If LV is snapshot COW - whole snapshot needs reload */
|
||||
plv = lv_is_cow(sl->seg->lv) ? origin_from_cow(sl->seg->lv) : sl->seg->lv;
|
||||
|
Loading…
Reference in New Issue
Block a user