#define RBD_EXPORT_IMAGE_ORDER 'O'
#define RBD_EXPORT_IMAGE_FEATURES 'T'
+#define RBD_EXPORT_IMAGE_STRIPEUNIT 'U'
+#define RBD_EXPORT_IMAGE_STRIPECOUNT 'C'
#define RBD_EXPORT_IMAGE_END 'E'
enum SnapshotPresence {
::encode(tag, bl);
::encode(features, bl);
+ // encode stripe_unit and stripe_count
+ tag = RBD_EXPORT_IMAGE_STRIPEUNIT;
+ uint64_t stripe_unit;
+ stripe_unit = image.get_stripe_unit();
+ ::encode(tag, bl);
+ ::encode(stripe_unit, bl);
+
+ tag = RBD_EXPORT_IMAGE_STRIPECOUNT;
+ uint64_t stripe_count;
+ stripe_count = image.get_stripe_count();
+ ::encode(tag, bl);
+ ::encode(stripe_count, bl);
+
// encode end tag
tag = RBD_EXPORT_IMAGE_END;
::encode(tag, bl);
if (opts.get(RBD_IMAGE_OPTION_FEATURES, &features) != 0) {
opts.set(RBD_IMAGE_OPTION_FEATURES, features);
}
+ } else if (tag == RBD_EXPORT_IMAGE_STRIPEUNIT) {
+ uint64_t stripe_unit = 0;
+ r = safe_read_exact(fd, &stripe_unit, 8);
+ if (r < 0) {
+ goto done;
+ }
+ if (opts.get(RBD_IMAGE_OPTION_STRIPE_UNIT, &stripe_unit) != 0) {
+ opts.set(RBD_IMAGE_OPTION_STRIPE_UNIT, stripe_unit);
+ }
+ } else if (tag == RBD_EXPORT_IMAGE_STRIPECOUNT) {
+ uint64_t stripe_count = 0;
+ r = safe_read_exact(fd, &stripe_count, 8);
+ if (r < 0) {
+ goto done;
+ }
+ if (opts.get(RBD_IMAGE_OPTION_STRIPE_COUNT, &stripe_count) != 0) {
+ opts.set(RBD_IMAGE_OPTION_STRIPE_COUNT, stripe_count);
+ }
} else {
std::cerr << "rbd: invalid tag in image priority zone: " << tag << std::endl;
r = -EINVAL;