]> Pileus Git - ~andy/linux/blobdiff - drivers/block/rbd.c
rbd: define separate read and write format funcs
[~andy/linux] / drivers / block / rbd.c
index 449847badcd883f2fac408b951ba2e992f35756a..e15c70e3f860b4f0415939bbffaa724150e97e8f 100644 (file)
@@ -1489,28 +1489,31 @@ static void rbd_osd_req_callback(struct ceph_osd_request *osd_req,
                rbd_obj_request_complete(obj_request);
 }
 
-static void rbd_osd_req_format(struct rbd_obj_request *obj_request,
-                                       bool write_request)
+static void rbd_osd_req_format_read(struct rbd_obj_request *obj_request)
 {
        struct rbd_img_request *img_request = obj_request->img_request;
        struct ceph_osd_request *osd_req = obj_request->osd_req;
-       struct ceph_snap_context *snapc = NULL;
-       u64 snap_id = CEPH_NOSNAP;
-       struct timespec *mtime = NULL;
-       struct timespec now;
+       u64 snap_id;
 
        rbd_assert(osd_req != NULL);
 
-       if (write_request) {
-               now = CURRENT_TIME;
-               mtime = &now;
-               if (img_request)
-                       snapc = img_request->snapc;
-       } else if (img_request) {
-               snap_id = img_request->snap_id;
-       }
+       snap_id = img_request ? img_request->snap_id : CEPH_NOSNAP;
+       ceph_osdc_build_request(osd_req, obj_request->offset,
+                       NULL, snap_id, NULL);
+}
+
+static void rbd_osd_req_format_write(struct rbd_obj_request *obj_request)
+{
+       struct rbd_img_request *img_request = obj_request->img_request;
+       struct ceph_osd_request *osd_req = obj_request->osd_req;
+       struct ceph_snap_context *snapc;
+       struct timespec mtime = CURRENT_TIME;
+
+       rbd_assert(osd_req != NULL);
+
+       snapc = img_request ? img_request->snapc : NULL;
        ceph_osdc_build_request(osd_req, obj_request->offset,
-                       snapc, snap_id, mtime);
+                       snapc, CEPH_NOSNAP, &mtime);
 }
 
 static struct ceph_osd_request *rbd_osd_req_create(
@@ -1845,7 +1848,11 @@ static int rbd_img_request_fill_bio(struct rbd_img_request *img_request,
                                                0, 0);
                osd_req_op_extent_osd_data_bio(osd_req, 0,
                                obj_request->bio_list, obj_request->length);
-               rbd_osd_req_format(obj_request, write_request);
+
+               if (write_request)
+                       rbd_osd_req_format_write(obj_request);
+               else
+                       rbd_osd_req_format_read(obj_request);
 
                obj_request->img_offset = img_offset;
                rbd_img_obj_request_add(img_request, obj_request);
@@ -1969,7 +1976,7 @@ static int rbd_img_obj_exists_submit(struct rbd_obj_request *obj_request)
        osd_req_op_init(stat_request->osd_req, 0, CEPH_OSD_OP_STAT);
        osd_req_op_raw_data_in_pages(stat_request->osd_req, 0, pages, size, 0,
                                        false, false);
-       rbd_osd_req_format(stat_request, false);
+       rbd_osd_req_format_read(stat_request);
 
        osdc = &rbd_dev->rbd_client->client->osdc;
        ret = rbd_obj_request_submit(osdc, stat_request);
@@ -2091,7 +2098,7 @@ static int rbd_obj_notify_ack(struct rbd_device *rbd_dev,
 
        osd_req_op_watch_init(obj_request->osd_req, 0, CEPH_OSD_OP_NOTIFY_ACK,
                                        notify_id, ver, 0);
-       rbd_osd_req_format(obj_request, false);
+       rbd_osd_req_format_read(obj_request);
 
        ret = rbd_obj_request_submit(osdc, obj_request);
 out:
@@ -2161,7 +2168,7 @@ static int rbd_dev_header_watch_sync(struct rbd_device *rbd_dev, int start)
        osd_req_op_watch_init(obj_request->osd_req, 0, CEPH_OSD_OP_WATCH,
                                rbd_dev->watch_event->cookie,
                                rbd_dev->header.obj_version, start);
-       rbd_osd_req_format(obj_request, true);
+       rbd_osd_req_format_write(obj_request);
 
        ret = rbd_obj_request_submit(osdc, obj_request);
        if (ret)
@@ -2262,7 +2269,7 @@ static int rbd_obj_method_sync(struct rbd_device *rbd_dev,
        osd_req_op_cls_response_data_pages(obj_request->osd_req, 0,
                                        obj_request->pages, inbound_size,
                                        0, false, false);
-       rbd_osd_req_format(obj_request, false);
+       rbd_osd_req_format_read(obj_request);
 
        ret = rbd_obj_request_submit(osdc, obj_request);
        if (ret)
@@ -2473,7 +2480,7 @@ static int rbd_obj_read_sync(struct rbd_device *rbd_dev,
                                        obj_request->length,
                                        obj_request->offset & ~PAGE_MASK,
                                        false, false);
-       rbd_osd_req_format(obj_request, false);
+       rbd_osd_req_format_read(obj_request);
 
        ret = rbd_obj_request_submit(osdc, obj_request);
        if (ret)