]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd: import/export features of image
authorDongsheng Yang <dongsheng.yang@easystack.cn>
Fri, 14 Oct 2016 02:15:27 +0000 (22:15 -0400)
committerDongsheng Yang <dongsheng.yang@easystack.cn>
Sun, 19 Feb 2017 12:42:03 +0000 (20:42 +0800)
Signed-off-by: Dongsheng Yang <dongsheng.yang@easystack.cn>
src/tools/rbd/Utils.h
src/tools/rbd/action/Export.cc
src/tools/rbd/action/Import.cc

index f1819abed280820cf3c503fcb4b9c69c6a18a80b..b885631544e7f74e310643115c4acf5f743865ef 100644 (file)
@@ -28,6 +28,7 @@ static const std::string RBD_DIFF_BANNER_V2 ("rbd diff v2\n");
 #define RBD_DIFF_END           'e'
 
 #define RBD_EXPORT_IMAGE_ORDER         'O'
+#define RBD_EXPORT_IMAGE_FEATURES      'T'
 #define RBD_EXPORT_IMAGE_END           'E'
 
 enum SnapshotPresence {
index b269f36ad6c4dfd47d69a37fb5037dc26de702c4..bac84cf619c25f5f450dbe0fafe3fad28f25285a 100644 (file)
@@ -408,6 +408,13 @@ static int do_export(librbd::Image& image, const char *path, bool no_progress, i
     ::encode(tag, bl);
     ::encode(uint64_t(info.order), bl);
 
+    // encode features
+    tag = RBD_EXPORT_IMAGE_FEATURES;
+    uint64_t features;
+    image.features(&features);
+    ::encode(tag, bl);
+    ::encode(features, bl);
+
     // encode end tag
     tag = RBD_EXPORT_IMAGE_END;
     ::encode(tag, bl);
index b64f8ca63eb943a43a82669d7b7f0796f7c66231..8945bb94c00b6fa220babfa0343fa9484eb4c4ca 100644 (file)
@@ -411,6 +411,14 @@ static int do_import(librbd::RBD &rbd, librados::IoCtx& io_ctx,
        }
        if (opts.get(RBD_IMAGE_OPTION_ORDER, &order) != 0) {
          opts.set(RBD_IMAGE_OPTION_ORDER, order);
+      } else if (tag == RBD_EXPORT_IMAGE_FEATURES) {
+       uint64_t features = 0;
+       r = safe_read_exact(fd, &features, 8);
+       if (r < 0) {
+         goto done;
+       }
+       if (opts.get(RBD_IMAGE_OPTION_FEATURES, &features) != 0) {
+         opts.set(RBD_IMAGE_OPTION_FEATURES, features);
        }
       } else {
        std::cerr << "rbd: invalid tag in image priority zone: " << tag << std::endl;