diff --git a/WHATS_NEW b/WHATS_NEW index 36523f575..f24b4d0e6 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.02.180 - ================================= + Fix unmonitoring of merging snapshots. Add missing -l description in fsadm man page. Cache can uses metadata format 2 with cleaner policy. Avoid showing internal error in lvs output or pvmoved LVs. diff --git a/lib/activate/activate.c b/lib/activate/activate.c index 985215afb..56ec73241 100644 --- a/lib/activate/activate.c +++ b/lib/activate/activate.c @@ -1907,7 +1907,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; diff --git a/lib/metadata/lv.c b/lib/metadata/lv.c index b19ae34cd..2abe42db7 100644 --- a/lib/metadata/lv.c +++ b/lib/metadata/lv.c @@ -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));