rbd: factor out rbd_osd_setup_copyup()
authorIlya Dryomov <idryomov@gmail.com>
Wed, 29 May 2019 14:53:14 +0000 (16:53 +0200)
committerIlya Dryomov <idryomov@gmail.com>
Mon, 8 Jul 2019 12:01:44 +0000 (14:01 +0200)
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Reviewed-by: Dongsheng Yang <dongsheng.yang@easystack.cn>
drivers/block/rbd.c

index c6e0d4ace8acd13962cb0a787e39cd4adb4d53d2..dd63dbcefdc5e2a406a561b17a176457fc34c695 100644 (file)
@@ -1861,6 +1861,21 @@ static int rbd_osd_setup_stat(struct ceph_osd_request *osd_req, int which)
        return 0;
 }
 
+static int rbd_osd_setup_copyup(struct ceph_osd_request *osd_req, int which,
+                               u32 bytes)
+{
+       struct rbd_obj_request *obj_req = osd_req->r_priv;
+       int ret;
+
+       ret = osd_req_op_cls_init(osd_req, which, "rbd", "copyup");
+       if (ret)
+               return ret;
+
+       osd_req_op_cls_request_data_bvecs(osd_req, which, obj_req->copyup_bvecs,
+                                         obj_req->copyup_bvec_count, bytes);
+       return 0;
+}
+
 static int count_write_ops(struct rbd_obj_request *obj_req)
 {
        return 2; /* setallochint + write/writefull */
@@ -2560,14 +2575,10 @@ static int rbd_obj_issue_copyup_empty_snapc(struct rbd_obj_request *obj_req,
        if (IS_ERR(osd_req))
                return PTR_ERR(osd_req);
 
-       ret = osd_req_op_cls_init(osd_req, 0, "rbd", "copyup");
+       ret = rbd_osd_setup_copyup(osd_req, 0, bytes);
        if (ret)
                return ret;
 
-       osd_req_op_cls_request_data_bvecs(osd_req, 0,
-                                         obj_req->copyup_bvecs,
-                                         obj_req->copyup_bvec_count,
-                                         bytes);
        rbd_osd_format_write(osd_req);
 
        ret = ceph_osdc_alloc_messages(osd_req, GFP_NOIO);
@@ -2604,15 +2615,9 @@ static int rbd_obj_issue_copyup_ops(struct rbd_obj_request *obj_req, u32 bytes)
                return PTR_ERR(osd_req);
 
        if (bytes != MODS_ONLY) {
-               ret = osd_req_op_cls_init(osd_req, which, "rbd",
-                                         "copyup");
+               ret = rbd_osd_setup_copyup(osd_req, which++, bytes);
                if (ret)
                        return ret;
-
-               osd_req_op_cls_request_data_bvecs(osd_req, which++,
-                                                 obj_req->copyup_bvecs,
-                                                 obj_req->copyup_bvec_count,
-                                                 bytes);
        }
 
        switch (img_req->op_type) {