From: Dongsheng Yang Date: Fri, 14 Oct 2016 02:15:27 +0000 (-0400) Subject: rbd: import/export features of image X-Git-Tag: v12.0.1~342^2~10 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=912ff4d2aeea4ba064924dabf7c0a626048e4453;p=ceph.git rbd: import/export features of image Signed-off-by: Dongsheng Yang --- diff --git a/src/tools/rbd/Utils.h b/src/tools/rbd/Utils.h index f1819abed280..b885631544e7 100644 --- a/src/tools/rbd/Utils.h +++ b/src/tools/rbd/Utils.h @@ -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 { diff --git a/src/tools/rbd/action/Export.cc b/src/tools/rbd/action/Export.cc index b269f36ad6c4..bac84cf619c2 100644 --- a/src/tools/rbd/action/Export.cc +++ b/src/tools/rbd/action/Export.cc @@ -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); diff --git a/src/tools/rbd/action/Import.cc b/src/tools/rbd/action/Import.cc index b64f8ca63eb9..8945bb94c00b 100644 --- a/src/tools/rbd/action/Import.cc +++ b/src/tools/rbd/action/Import.cc @@ -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;