]> sourceware.org Git - lvm2.git/commitdiff
Convey need for snapshot-merge target in lvconvert error message and man
authorMike Snitzer <snitzer@redhat.com>
Wed, 13 Oct 2010 21:26:37 +0000 (21:26 +0000)
committerMike Snitzer <snitzer@redhat.com>
Wed, 13 Oct 2010 21:26:37 +0000 (21:26 +0000)
page.

Add ->target_name to segtype_handler to allow a more specific target
name to be returned based on the state of the segment.

Result of trying to merge a snapshot using a kernel that doesn't have
the snapshot-merge target:

Before:
# lvconvert --merge vg/snap
  Can't expand LV lv: snapshot target support missing from kernel?
  Failed to suspend origin lv

After:
# lvconvert --merge vg/snap
  Can't process LV lv: snapshot-merge target support missing from kernel?
  Failed to suspend origin lv
  Unable to merge LV "snap" into it's origin.

WHATS_NEW
lib/activate/dev_manager.c
lib/metadata/segtype.h
lib/snapshot/snapshot.c
man/lvconvert.8.in
tools/lvconvert.c

index 327507f70a07f6aafd66a4f1799521528dfe73e3..61e9714916c408f720382aed90f413ddbe5660db 100644 (file)
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 2.02.75 - 
 =====================================
+  Convey need for snapshot-merge target in lvconvert error message and man page.
   Add "devices/disable_after_error_count" to lvm.conf.
   Give correct error message when creating a too-small snapshot.
   Implement vgextend --restoremissing.
index cee8f104f8c66b769a3dc502d6e79ef93654c987..7981f2276f040ec50aca5d1608cca688d340c509 100644 (file)
@@ -1350,19 +1350,23 @@ static int _add_segment_to_dtree(struct dev_manager *dm,
        uint32_t s;
        struct dm_list *snh;
        struct lv_segment *seg_present;
+       const char *target_name;
 
        /* Ensure required device-mapper targets are loaded */
        seg_present = find_cow(seg->lv) ? : seg;
+       target_name = (seg_present->segtype->ops->target_name ?
+                      seg_present->segtype->ops->target_name(seg_present) :
+                      seg_present->segtype->name);
 
        log_debug("Checking kernel supports %s segment type for %s%s%s",
-                 seg_present->segtype->name, seg->lv->name,
+                 target_name, seg->lv->name,
                  layer ? "-" : "", layer ? : "");
 
        if (seg_present->segtype->ops->target_present &&
            !seg_present->segtype->ops->target_present(seg_present->lv->vg->cmd,
                                                       seg_present, NULL)) {
-               log_error("Can't expand LV %s: %s target support missing "
-                         "from kernel?", seg->lv->name, seg_present->segtype->name);
+               log_error("Can't process LV %s: %s target support missing "
+                         "from kernel?", seg->lv->name, target_name);
                return 0;
        }
 
index d15df8bb72ef77cb784636018e85ab5b416ac1ac..c31cf32fe05aa390a888d84b1636a878d2899475 100644 (file)
@@ -66,6 +66,7 @@ struct segment_type {
 
 struct segtype_handler {
        const char *(*name) (const struct lv_segment * seg);
+       const char *(*target_name) (const struct lv_segment * seg);
        void (*display) (const struct lv_segment * seg);
        int (*text_export) (const struct lv_segment * seg,
                            struct formatter * f);
index 92f891111d13dfab60a07a7d4e363e2a340aad49..30e78d47a58bb878d8bcc912b55ceb8005333613 100644 (file)
@@ -28,6 +28,14 @@ static const char *_snap_name(const struct lv_segment *seg)
        return seg->segtype->name;
 }
 
+static const char *_snap_target_name(const struct lv_segment *seg)
+{
+       if (seg->status & MERGING)
+               return "snapshot-merge";
+
+       return _snap_name(seg);
+}
+
 static int _snap_text_import(struct lv_segment *seg, const struct config_node *sn,
                        struct dm_hash_table *pv_hash __attribute__((unused)))
 {
@@ -217,6 +225,7 @@ static void _snap_destroy(const struct segment_type *segtype)
 
 static struct segtype_handler _snapshot_ops = {
        .name = _snap_name,
+       .target_name = _snap_target_name,
        .text_import = _snap_text_import,
        .text_export = _snap_text_export,
        .target_status_compatible = _snap_target_status_compatible,
index 3d4ba209a568db626bc9b7733b2356e66b730ed7..8e487931591943200591a5a52862b1bd297598f9 100644 (file)
@@ -135,8 +135,10 @@ Controls zeroing of the first KB of data in the snapshot.
 If the volume is read-only the snapshot will not be zeroed.
 .TP
 .I \-\-merge
-Merges a snapshot into its origin volume. If both the origin and snapshot volume
-are not open the merge will start immediately.  Otherwise, the merge will start
+Merges a snapshot into its origin volume.  To check if your kernel
+supports this feature, look for 'snapshot-merge' in the output
+of 'dmsetup targets'.  If both the origin and snapshot volume are not
+open the merge will start immediately.  Otherwise, the merge will start
 the first time either the origin or snapshot are activated and both are closed.
 Merging a snapshot into an origin that cannot be closed, for example a root
 filesystem, is deferred until the next time the origin volume is activated.
index f9d33e986da4e169385eaa98a02c0e1ad27d8af8..fe5fa002fa65bfd2ee7d8f8b4a5e03ceef4d23d9 100644 (file)
@@ -1563,7 +1563,7 @@ static int _lvconvert_single(struct cmd_context *cmd, struct logical_volume *lv,
                        return ECMD_FAILED;
                }
                if (!lvconvert_merge(cmd, lv, lp)) {
-                       stack;
+                       log_error("Unable to merge LV \"%s\" into it's origin.", lv->name);
                        return ECMD_FAILED;
                }
        } else if (lp->snapshot) {
This page took 0.049048 seconds and 5 git commands to generate.