From c6168a14c9f89349320f0075eea9ccf420c92d95 Mon Sep 17 00:00:00 2001 From: Zdenek Kabelac Date: Fri, 17 Jun 2011 14:22:48 +0000 Subject: [PATCH] Use lv_activate_opts struct instead of ACTIVATE_EXCL status flag Let's hope all conditions has been properly converted. --- WHATS_NEW | 1 + lib/activate/activate.c | 4 ++-- lib/activate/dev_manager.c | 14 +++++++------- lib/snapshot/snapshot.c | 2 +- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/WHATS_NEW b/WHATS_NEW index eb520dc47..ba7eaab83 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.02.86 - ================================= + Use lv_activate_opts struct instead of MERGING status flag. Use lv_activate_opts struct instead of ACTIVATE_EXCL status flag. Add lv_activate_opts structure for activation (replacing activation flags). Fix a problem with inconsistent pre-commit metadata on MISSING_PV devices. diff --git a/lib/activate/activate.c b/lib/activate/activate.c index 79b1b0414..1e8998af3 100644 --- a/lib/activate/activate.c +++ b/lib/activate/activate.c @@ -986,8 +986,8 @@ int monitor_dev_for_events(struct cmd_context *cmd, struct logical_volume *lv, * In case of a snapshot device, we monitor lv->snapshot->lv, * not the actual LV itself. */ - if (lv_is_cow(lv) && !lv_is_merging_cow(lv)) - return monitor_dev_for_events(cmd, lv->snapshot->lv, 0, monitor); + if (lv_is_cow(lv) && (laopts->no_merging || !lv_is_merging_cow(lv))) + return monitor_dev_for_events(cmd, lv->snapshot->lv, NULL, monitor); /* * In case this LV is a snapshot origin, we instead monitor diff --git a/lib/activate/dev_manager.c b/lib/activate/dev_manager.c index 8465c79ea..98f973ea7 100644 --- a/lib/activate/dev_manager.c +++ b/lib/activate/dev_manager.c @@ -1276,7 +1276,7 @@ static int _add_snapshot_target_to_dtree(struct dev_manager *dm, size = (uint64_t) snap_seg->len * snap_seg->origin->vg->extent_size; - if (lv_is_merging_cow(lv)) { + if (!laopts->no_merging && lv_is_merging_cow(lv)) { /* cow is to be merged so load the error target */ if (!dm_tree_node_add_error_target(dnode, size)) return_0; @@ -1412,7 +1412,7 @@ static int _add_segment_to_dtree(struct dev_manager *dm, /* If this is a snapshot origin, add real LV */ /* If this is a snapshot origin + merging snapshot, add cow + real LV */ } else if (lv_is_origin(seg->lv) && !layer) { - if (lv_is_merging_origin(seg->lv)) { + if (!laopts->no_merging && lv_is_merging_origin(seg->lv)) { if (!_add_new_lv_to_dtree(dm, dtree, find_merging_cow(seg->lv)->cow, laopts, "cow")) return_0; @@ -1423,7 +1423,7 @@ static int _add_segment_to_dtree(struct dev_manager *dm, } if (!_add_new_lv_to_dtree(dm, dtree, seg->lv, laopts, "real")) return_0; - } else if (lv_is_cow(seg->lv) && !layer) { + } else if (!laopts->no_merging && lv_is_cow(seg->lv) && !layer) { if (!_add_new_lv_to_dtree(dm, dtree, seg->lv, laopts, "cow")) return_0; } else { @@ -1437,14 +1437,14 @@ static int _add_segment_to_dtree(struct dev_manager *dm, /* Now we've added its dependencies, we can add the target itself */ if (lv_is_origin(seg->lv) && !layer) { - if (!lv_is_merging_origin(seg->lv)) { + if (laopts->no_merging || !lv_is_merging_origin(seg->lv)) { if (!_add_origin_target_to_dtree(dm, dnode, seg->lv)) return_0; } else { if (!_add_snapshot_merge_target_to_dtree(dm, dnode, seg->lv)) return_0; } - } else if (lv_is_cow(seg->lv) && !layer) { + } else if (!laopts->no_merging && lv_is_cow(seg->lv) && !layer) { if (!_add_snapshot_target_to_dtree(dm, dnode, seg->lv, laopts)) return_0; } else if (!_add_target_to_dtree(dm, dnode, seg, laopts)) @@ -1490,7 +1490,7 @@ static int _add_new_lv_to_dtree(struct dev_manager *dm, struct dm_tree *dtree, dtree)) && dinfo->open_count)) { /* FIXME Is there anything simpler to check for instead? */ if (!lv_has_target_type(dm->mem, lv, NULL, "snapshot-merge")) - clear_snapshot_merge(lv); + laopts->no_merging = 1; } } @@ -1542,7 +1542,7 @@ static int _add_new_lv_to_dtree(struct dev_manager *dm, struct dm_tree *dtree, /* These aren't real segments in the LVM2 metadata */ if (lv_is_origin(lv) && !layer) break; - if (lv_is_cow(lv) && !layer) + if (!laopts->no_merging && lv_is_cow(lv) && !layer) break; if (max_stripe_size < seg->stripe_size * seg->area_count) max_stripe_size = seg->stripe_size * seg->area_count; diff --git a/lib/snapshot/snapshot.c b/lib/snapshot/snapshot.c index 3555f366b..8c4830895 100644 --- a/lib/snapshot/snapshot.c +++ b/lib/snapshot/snapshot.c @@ -31,7 +31,7 @@ static const char *_snap_name(const struct lv_segment *seg) static const char *_snap_target_name(const struct lv_segment *seg, const struct lv_activate_opts *laopts) { - if (seg->status & MERGING) + if (!laopts->no_merging && (seg->status & MERGING)) return "snapshot-merge"; return _snap_name(seg);