From dfb3a0148545c81ef57298610dff9135bbf52e5d Mon Sep 17 00:00:00 2001 From: Haomai Wang Date: Mon, 9 Mar 2015 14:13:56 +0800 Subject: [PATCH] librbd: Make metadata support clone operation Signed-off-by: Haomai Wang --- src/librbd/internal.cc | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/librbd/internal.cc b/src/librbd/internal.cc index c8700fb9519c2..8ccc02598e9d0 100644 --- a/src/librbd/internal.cc +++ b/src/librbd/internal.cc @@ -1077,6 +1077,7 @@ reprotect_and_return_err: int remove_r; librbd::NoOpProgressContext no_op; ImageCtx *c_imctx = NULL; + map pairs; // make sure parent snapshot exists ImageCtx *p_imctx = new ImageCtx(p_name, "", p_snap_name, p_ioctx, true); r = open_image(p_imctx); @@ -1143,6 +1144,20 @@ reprotect_and_return_err: goto err_close_child; } + r = cls_client::metadata_list(&p_ioctx, p_imctx->header_oid, &pairs); + if (r < 0) { + lderr(cct) << "couldn't list metadata: " << r << dendl; + goto err_close_child; + } + for (map::iterator it = pairs.begin(); it != pairs.end(); it++) { + r = cls_client::metadata_set(&c_ioctx, c_imctx->header_oid, + it->first, it->second); + if (r < 0) { + lderr(cct) << "couldn't set metadata: " << r << dendl; + goto err_close_child; + } + } + p_imctx->md_lock.get_write(); r = ictx_refresh(p_imctx); p_imctx->md_lock.put_write(); -- 2.39.5