From 28e576e278f9cd00bb91d59cf8dc89ca3884516f Mon Sep 17 00:00:00 2001 From: Mykola Golub Date: Wed, 31 Aug 2016 22:30:24 +0300 Subject: [PATCH] cls/rbd: alow to call set_features asynchronously Signed-off-by: Mykola Golub --- src/cls/rbd/cls_rbd_client.cc | 17 ++++++++++++----- src/cls/rbd/cls_rbd_client.h | 2 ++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/cls/rbd/cls_rbd_client.cc b/src/cls/rbd/cls_rbd_client.cc index 3b499c9103d..4a53acce9b1 100644 --- a/src/cls/rbd/cls_rbd_client.cc +++ b/src/cls/rbd/cls_rbd_client.cc @@ -198,15 +198,22 @@ namespace librbd { return 0; } + void set_features(librados::ObjectWriteOperation *op, uint64_t features, + uint64_t mask) + { + bufferlist bl; + ::encode(features, bl); + ::encode(mask, bl); + + op->exec("rbd", "set_features", bl); + } + int set_features(librados::IoCtx *ioctx, const std::string &oid, uint64_t features, uint64_t mask) { - bufferlist inbl; - ::encode(features, inbl); - ::encode(mask, inbl); - librados::ObjectWriteOperation op; - op.exec("rbd", "set_features", inbl); + set_features(&op, features, mask); + return ioctx->operate(oid, &op); } diff --git a/src/cls/rbd/cls_rbd_client.h b/src/cls/rbd/cls_rbd_client.h index 6969aba2a4f..75634ce6013 100644 --- a/src/cls/rbd/cls_rbd_client.h +++ b/src/cls/rbd/cls_rbd_client.h @@ -56,6 +56,8 @@ namespace librbd { const std::string &object_prefix); int get_features(librados::IoCtx *ioctx, const std::string &oid, snapid_t snap_id, uint64_t *features); + void set_features(librados::ObjectWriteOperation *op, uint64_t features, + uint64_t mask); int set_features(librados::IoCtx *ioctx, const std::string &oid, uint64_t features, uint64_t mask); int get_object_prefix(librados::IoCtx *ioctx, const std::string &oid, -- 2.47.3