]> sourceware.org Git - lvm2.git/commitdiff
snapshot: improve checking of merging snapshot
authorZdenek Kabelac <zkabelac@redhat.com>
Mon, 11 Jun 2018 20:19:20 +0000 (22:19 +0200)
committerZdenek Kabelac <zkabelac@redhat.com>
Mon, 11 Jun 2018 20:25:42 +0000 (22:25 +0200)
Add runtime detection for 'lvs -o+seg_monitor' and 'vgchange --monitor'.
This fix should avoid unnecessary timeout on systemd shutdown.

WHATS_NEW
lib/activate/activate.c
lib/metadata/lv.c

index 162b58432e907c8342051df2be6cfa8789f2f6a7..a875553b9a4cdd87c6f1af2e89273c46a02cf011 100644 (file)
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 3.0.0
 =============
+  Fix unmonitoring of merging snapshots.
   Cache can uses metadata format 2 with cleaner policy.
   Fix check if resized PV can also fit metadata area.
   Avoid showing internal error in lvs output or pvmoved LVs.
index ce67ec86f84c1cc7bb4ff51da2fc1420f2d53cd1..8f4462a864ec935d89d28a1e929a2a5aba621de5 100644 (file)
@@ -1735,7 +1735,8 @@ int monitor_dev_for_events(struct cmd_context *cmd, const struct logical_volume
         * In case of a snapshot device, we monitor lv->snapshot->lv,
         * not the actual LV itself.
         */
-       if (lv_is_cow(lv) && (laopts->no_merging || !lv_is_merging_cow(lv))) {
+       if (lv_is_cow(lv) && (laopts->no_merging || !lv_is_merging_cow(lv) ||
+                             lv_has_target_type(lv->vg->cmd->mem, lv, NULL, TARGET_NAME_SNAPSHOT))) {
                if (!(r = monitor_dev_for_events(cmd, lv->snapshot->lv, NULL, monitor)))
                        stack;
                return r;
index 14d7312cbb5f49373458dfa386e1a1e4b749521d..7ab06cb9d4c1762b80e2d29c9a253c4e1c03e61f 100644 (file)
@@ -301,7 +301,8 @@ char *lvseg_monitor_dup(struct dm_pool *mem, const struct lv_segment *seg)
        int pending = 0, monitored = 0;
        struct lv_segment *segm = (struct lv_segment *) seg;
 
-       if (lv_is_cow(seg->lv) && !lv_is_merging_cow(seg->lv))
+       if (lv_is_cow(seg->lv) && (!lv_is_merging_cow(seg->lv) ||
+                                  lv_has_target_type(seg->lv->vg->cmd->mem, seg->lv, NULL, TARGET_NAME_SNAPSHOT)))
                segm = first_seg(seg->lv->snapshot->lv);
 
        // log_debug("Query LV:%s mon:%s segm:%s tgtm:%p  segmon:%d statusm:%d", seg->lv->name, segm->lv->name, segm->segtype->name, segm->segtype->ops->target_monitored, seg_monitored(segm), (int)(segm->status & PVMOVE));
This page took 0.057502 seconds and 5 git commands to generate.