diff mbox

[14/20] rbd: rearrange some code for consistency

Message ID 515EDA04.10903@inktank.com (mailing list archive)
State New, archived
Headers show

Commit Message

Alex Elder April 5, 2013, 2:04 p.m. UTC
This patch just trivially moves around some code for consistency.

In preparation for initializing osd request data fields in
ceph_osdc_build_request(), I wanted to verify that rbd did in fact
call that immediatley before it called ceph_osdc_start_request().
It was true (although image requests are built in a group and then
started as a group).  But I made the changes here just to make
it more obvious, by making all of the calls follow a common
sequence:
	osd_req_op_<optype>_init();
	ceph_osd_data_<type>_init()
	osd_req_op_<optype>_<datafield>()
	rbd_osd_req_format()
	...
	ret = rbd_obj_request_submit()

I moved the initialization of the callback for image object requests
into rbd_img_request_fill_bio(), again, for consistency.  To avoid
a forward reference, I moved the definition of rbd_img_obj_callback()
up in the file.

Signed-off-by: Alex Elder <elder@inktank.com>
---
 drivers/block/rbd.c |  129
+++++++++++++++++++++++++--------------------------
 1 file changed, 63 insertions(+), 66 deletions(-)

 {
@@ -1572,6 +1623,7 @@ static int rbd_img_request_fill_bio(struct
rbd_img_request *img_request,
 		if (!osd_req)
 			goto out_partial;
 		obj_request->osd_req = osd_req;
+		obj_request->callback = rbd_img_obj_callback;

 		osd_data = write_request ? &osd_req->r_data_out
 					 : &osd_req->r_data_in;
@@ -1582,8 +1634,6 @@ static int rbd_img_request_fill_bio(struct
rbd_img_request *img_request,
 		osd_req_op_extent_osd_data(osd_req, 0, osd_data);
 		rbd_osd_req_format(obj_request, write_request);

-		/* status and version are initially zero-filled */
-
 		rbd_img_obj_request_add(img_request, obj_request);

 		image_offset += length;
@@ -1601,57 +1651,6 @@ out_unwind:
 	return -ENOMEM;
 }

-static void rbd_img_obj_callback(struct rbd_obj_request *obj_request)
-{
-	struct rbd_img_request *img_request;
-	u32 which = obj_request->which;
-	bool more = true;
-
-	img_request = obj_request->img_request;
-
-	dout("%s: img %p obj %p\n", __func__, img_request, obj_request);
-	rbd_assert(img_request != NULL);
-	rbd_assert(img_request->rq != NULL);
-	rbd_assert(img_request->obj_request_count > 0);
-	rbd_assert(which != BAD_WHICH);
-	rbd_assert(which < img_request->obj_request_count);
-	rbd_assert(which >= img_request->next_completion);
-
-	spin_lock_irq(&img_request->completion_lock);
-	if (which != img_request->next_completion)
-		goto out;
-
-	for_each_obj_request_from(img_request, obj_request) {
-		unsigned int xferred;
-		int result;
-
-		rbd_assert(more);
-		rbd_assert(which < img_request->obj_request_count);
-
-		if (!obj_request_done_test(obj_request))
-			break;
-
-		rbd_assert(obj_request->xferred <= (u64) UINT_MAX);
-		xferred = (unsigned int) obj_request->xferred;
-		result = (int) obj_request->result;
-		if (result)
-			rbd_warn(NULL, "obj_request %s result %d xferred %u\n",
-				img_request->write_request ? "write" : "read",
-				result, xferred);
-
-		more = blk_end_request(img_request->rq, result, xferred);
-		which++;
-	}
-
-	rbd_assert(more ^ (which == img_request->obj_request_count));
-	img_request->next_completion = which;
-out:
-	spin_unlock_irq(&img_request->completion_lock);
-
-	if (!more)
-		rbd_img_request_complete(img_request);
-}
-
 static int rbd_img_request_submit(struct rbd_img_request *img_request)
 {
 	struct rbd_device *rbd_dev = img_request->rbd_dev;
@@ -1662,7 +1661,6 @@ static int rbd_img_request_submit(struct
rbd_img_request *img_request)
 	for_each_obj_request(img_request, obj_request) {
 		int ret;

-		obj_request->callback = rbd_img_obj_callback;
 		ret = rbd_obj_request_submit(osdc, obj_request);
 		if (ret)
 			return ret;
@@ -1681,8 +1679,9 @@ static int rbd_obj_notify_ack(struct rbd_device
*rbd_dev,
 				   u64 ver, u64 notify_id)
 {
 	struct rbd_obj_request *obj_request;
-	struct ceph_osd_client *osdc;
+	struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc;
 	int ret;
+	osdc = &rbd_dev->rbd_client->client->osdc;

 	obj_request = rbd_obj_request_create(rbd_dev->header_name, 0, 0,
 							OBJ_REQUEST_NODATA);
@@ -1693,13 +1692,12 @@ static int rbd_obj_notify_ack(struct rbd_device
*rbd_dev,
 	obj_request->osd_req = rbd_osd_req_create(rbd_dev, false, obj_request);
 	if (!obj_request->osd_req)
 		goto out;
+	obj_request->callback = rbd_obj_request_put;

 	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);

-	osdc = &rbd_dev->rbd_client->client->osdc;
-	obj_request->callback = rbd_obj_request_put;
 	ret = rbd_obj_request_submit(osdc, obj_request);
 out:
 	if (ret)
@@ -1759,16 +1757,17 @@ static int rbd_dev_header_watch_sync(struct
rbd_device *rbd_dev, int start)
 	if (!obj_request->osd_req)
 		goto out_cancel;

-	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);
-
 	if (start)
 		ceph_osdc_set_request_linger(osdc, obj_request->osd_req);
 	else
 		ceph_osdc_unregister_linger_request(osdc,
 					rbd_dev->watch_request->osd_req);
+
+	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);
+
 	ret = rbd_obj_request_submit(osdc, obj_request);
 	if (ret)
 		goto out_cancel;
@@ -1820,9 +1819,9 @@ static int rbd_obj_method_sync(struct rbd_device
*rbd_dev,
 			     size_t inbound_size,
 			     u64 *version)
 {
+	struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc;
 	struct rbd_obj_request *obj_request;
 	struct ceph_osd_data *osd_data;
-	struct ceph_osd_client *osdc;
 	struct page **pages;
 	u32 page_count;
 	int ret;
@@ -1861,7 +1860,6 @@ static int rbd_obj_method_sync(struct rbd_device
*rbd_dev,
 	osd_req_op_cls_response_data(obj_request->osd_req, 0, osd_data);
 	rbd_osd_req_format(obj_request, false);

-	osdc = &rbd_dev->rbd_client->client->osdc;
 	ret = rbd_obj_request_submit(osdc, obj_request);
 	if (ret)
 		goto out;
@@ -2037,9 +2035,9 @@ static int rbd_obj_read_sync(struct rbd_device
*rbd_dev,
 				char *buf, u64 *version)

 {
+	struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc;
 	struct rbd_obj_request *obj_request;
 	struct ceph_osd_data *osd_data;
-	struct ceph_osd_client *osdc;
 	struct page **pages = NULL;
 	u32 page_count;
 	size_t size;
@@ -2073,7 +2071,6 @@ static int rbd_obj_read_sync(struct rbd_device
*rbd_dev,
 	osd_req_op_extent_osd_data(obj_request->osd_req, 0, osd_data);
 	rbd_osd_req_format(obj_request, false);

-	osdc = &rbd_dev->rbd_client->client->osdc;
 	ret = rbd_obj_request_submit(osdc, obj_request);
 	if (ret)
 		goto out;

Comments

Josh Durgin April 8, 2013, 6:15 p.m. UTC | #1
Just a couple nits.

Reviewed-by: Josh Durgin <josh.durgin@inktank.com>

Alex Elder <elder@inktank.com> wrote:
>This patch just trivially moves around some code for consistency.
>
>In preparation for initializing osd request data fields in
>ceph_osdc_build_request(), I wanted to verify that rbd did in fact
>call that immediatley before it called ceph_osdc_start_request().

typo in immediately

>It was true (although image requests are built in a group and then
>started as a group).  But I made the changes here just to make
>it more obvious, by making all of the calls follow a common
>sequence:
>	osd_req_op_<optype>_init();
>	ceph_osd_data_<type>_init()
>	osd_req_op_<optype>_<datafield>()
>	rbd_osd_req_format()
>	...
>	ret = rbd_obj_request_submit()
>
>I moved the initialization of the callback for image object requests
>into rbd_img_request_fill_bio(), again, for consistency.  To avoid
>a forward reference, I moved the definition of rbd_img_obj_callback()
>up in the file.
>
>Signed-off-by: Alex Elder <elder@inktank.com>
>---
> drivers/block/rbd.c |  129
>+++++++++++++++++++++++++--------------------------
> 1 file changed, 63 insertions(+), 66 deletions(-)
>
>diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
>index 1cd776b..3e8e6d5 100644
>--- a/drivers/block/rbd.c
>+++ b/drivers/block/rbd.c
>@@ -1519,6 +1519,57 @@ static void rbd_img_request_destroy(struct kref
>*kref)
> 	kfree(img_request);
> }
>
>+static void rbd_img_obj_callback(struct rbd_obj_request *obj_request)
>+{
>+	struct rbd_img_request *img_request;
>+	u32 which = obj_request->which;
>+	bool more = true;
>+
>+	img_request = obj_request->img_request;
>+
>+	dout("%s: img %p obj %p\n", __func__, img_request, obj_request);
>+	rbd_assert(img_request != NULL);
>+	rbd_assert(img_request->rq != NULL);
>+	rbd_assert(img_request->obj_request_count > 0);
>+	rbd_assert(which != BAD_WHICH);
>+	rbd_assert(which < img_request->obj_request_count);
>+	rbd_assert(which >= img_request->next_completion);
>+
>+	spin_lock_irq(&img_request->completion_lock);
>+	if (which != img_request->next_completion)
>+		goto out;
>+
>+	for_each_obj_request_from(img_request, obj_request) {
>+		unsigned int xferred;
>+		int result;
>+
>+		rbd_assert(more);
>+		rbd_assert(which < img_request->obj_request_count);
>+
>+		if (!obj_request_done_test(obj_request))
>+			break;
>+
>+		rbd_assert(obj_request->xferred <= (u64) UINT_MAX);
>+		xferred = (unsigned int) obj_request->xferred;
>+		result = (int) obj_request->result;
>+		if (result)
>+			rbd_warn(NULL, "obj_request %s result %d xferred %u\n",
>+				img_request->write_request ? "write" : "read",
>+				result, xferred);
>+
>+		more = blk_end_request(img_request->rq, result, xferred);
>+		which++;
>+	}
>+
>+	rbd_assert(more ^ (which == img_request->obj_request_count));
>+	img_request->next_completion = which;
>+out:
>+	spin_unlock_irq(&img_request->completion_lock);
>+
>+	if (!more)
>+		rbd_img_request_complete(img_request);
>+}
>+
>static int rbd_img_request_fill_bio(struct rbd_img_request
>*img_request,
> 					struct bio *bio_list)
> {
>@@ -1572,6 +1623,7 @@ static int rbd_img_request_fill_bio(struct
>rbd_img_request *img_request,
> 		if (!osd_req)
> 			goto out_partial;
> 		obj_request->osd_req = osd_req;
>+		obj_request->callback = rbd_img_obj_callback;
>
> 		osd_data = write_request ? &osd_req->r_data_out
> 					 : &osd_req->r_data_in;
>@@ -1582,8 +1634,6 @@ static int rbd_img_request_fill_bio(struct
>rbd_img_request *img_request,
> 		osd_req_op_extent_osd_data(osd_req, 0, osd_data);
> 		rbd_osd_req_format(obj_request, write_request);
>
>-		/* status and version are initially zero-filled */
>-
> 		rbd_img_obj_request_add(img_request, obj_request);
>
> 		image_offset += length;
>@@ -1601,57 +1651,6 @@ out_unwind:
> 	return -ENOMEM;
> }
>
>-static void rbd_img_obj_callback(struct rbd_obj_request *obj_request)
>-{
>-	struct rbd_img_request *img_request;
>-	u32 which = obj_request->which;
>-	bool more = true;
>-
>-	img_request = obj_request->img_request;
>-
>-	dout("%s: img %p obj %p\n", __func__, img_request, obj_request);
>-	rbd_assert(img_request != NULL);
>-	rbd_assert(img_request->rq != NULL);
>-	rbd_assert(img_request->obj_request_count > 0);
>-	rbd_assert(which != BAD_WHICH);
>-	rbd_assert(which < img_request->obj_request_count);
>-	rbd_assert(which >= img_request->next_completion);
>-
>-	spin_lock_irq(&img_request->completion_lock);
>-	if (which != img_request->next_completion)
>-		goto out;
>-
>-	for_each_obj_request_from(img_request, obj_request) {
>-		unsigned int xferred;
>-		int result;
>-
>-		rbd_assert(more);
>-		rbd_assert(which < img_request->obj_request_count);
>-
>-		if (!obj_request_done_test(obj_request))
>-			break;
>-
>-		rbd_assert(obj_request->xferred <= (u64) UINT_MAX);
>-		xferred = (unsigned int) obj_request->xferred;
>-		result = (int) obj_request->result;
>-		if (result)
>-			rbd_warn(NULL, "obj_request %s result %d xferred %u\n",
>-				img_request->write_request ? "write" : "read",
>-				result, xferred);
>-
>-		more = blk_end_request(img_request->rq, result, xferred);
>-		which++;
>-	}
>-
>-	rbd_assert(more ^ (which == img_request->obj_request_count));
>-	img_request->next_completion = which;
>-out:
>-	spin_unlock_irq(&img_request->completion_lock);
>-
>-	if (!more)
>-		rbd_img_request_complete(img_request);
>-}
>-
> static int rbd_img_request_submit(struct rbd_img_request *img_request)
> {
> 	struct rbd_device *rbd_dev = img_request->rbd_dev;
>@@ -1662,7 +1661,6 @@ static int rbd_img_request_submit(struct
>rbd_img_request *img_request)
> 	for_each_obj_request(img_request, obj_request) {
> 		int ret;
>
>-		obj_request->callback = rbd_img_obj_callback;
> 		ret = rbd_obj_request_submit(osdc, obj_request);
> 		if (ret)
> 			return ret;
>@@ -1681,8 +1679,9 @@ static int rbd_obj_notify_ack(struct rbd_device
>*rbd_dev,
> 				   u64 ver, u64 notify_id)
> {
> 	struct rbd_obj_request *obj_request;
>-	struct ceph_osd_client *osdc;
>+	struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc;
> 	int ret;
>+	osdc = &rbd_dev->rbd_client->client->osdc;

This is the same as two lines up.

>
> 	obj_request = rbd_obj_request_create(rbd_dev->header_name, 0, 0,
> 							OBJ_REQUEST_NODATA);
>@@ -1693,13 +1692,12 @@ static int rbd_obj_notify_ack(struct rbd_device
>*rbd_dev,
>	obj_request->osd_req = rbd_osd_req_create(rbd_dev, false,
>obj_request);
> 	if (!obj_request->osd_req)
> 		goto out;
>+	obj_request->callback = rbd_obj_request_put;
>
>	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);
>
>-	osdc = &rbd_dev->rbd_client->client->osdc;
>-	obj_request->callback = rbd_obj_request_put;
> 	ret = rbd_obj_request_submit(osdc, obj_request);
> out:
> 	if (ret)
>@@ -1759,16 +1757,17 @@ static int rbd_dev_header_watch_sync(struct
>rbd_device *rbd_dev, int start)
> 	if (!obj_request->osd_req)
> 		goto out_cancel;
>
>-	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);
>-
> 	if (start)
> 		ceph_osdc_set_request_linger(osdc, obj_request->osd_req);
> 	else
> 		ceph_osdc_unregister_linger_request(osdc,
> 					rbd_dev->watch_request->osd_req);
>+
>+	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);
>+
> 	ret = rbd_obj_request_submit(osdc, obj_request);
> 	if (ret)
> 		goto out_cancel;
>@@ -1820,9 +1819,9 @@ static int rbd_obj_method_sync(struct rbd_device
>*rbd_dev,
> 			     size_t inbound_size,
> 			     u64 *version)
> {
>+	struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc;
> 	struct rbd_obj_request *obj_request;
> 	struct ceph_osd_data *osd_data;
>-	struct ceph_osd_client *osdc;
> 	struct page **pages;
> 	u32 page_count;
> 	int ret;
>@@ -1861,7 +1860,6 @@ static int rbd_obj_method_sync(struct rbd_device
>*rbd_dev,
> 	osd_req_op_cls_response_data(obj_request->osd_req, 0, osd_data);
> 	rbd_osd_req_format(obj_request, false);
>
>-	osdc = &rbd_dev->rbd_client->client->osdc;
> 	ret = rbd_obj_request_submit(osdc, obj_request);
> 	if (ret)
> 		goto out;
>@@ -2037,9 +2035,9 @@ static int rbd_obj_read_sync(struct rbd_device
>*rbd_dev,
> 				char *buf, u64 *version)
>
> {
>+	struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc;
> 	struct rbd_obj_request *obj_request;
> 	struct ceph_osd_data *osd_data;
>-	struct ceph_osd_client *osdc;
> 	struct page **pages = NULL;
> 	u32 page_count;
> 	size_t size;
>@@ -2073,7 +2071,6 @@ static int rbd_obj_read_sync(struct rbd_device
>*rbd_dev,
> 	osd_req_op_extent_osd_data(obj_request->osd_req, 0, osd_data);
> 	rbd_osd_req_format(obj_request, false);
>
>-	osdc = &rbd_dev->rbd_client->client->osdc;
> 	ret = rbd_obj_request_submit(osdc, obj_request);
> 	if (ret)
> 		goto out;

--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index 1cd776b..3e8e6d5 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -1519,6 +1519,57 @@  static void rbd_img_request_destroy(struct kref
*kref)
 	kfree(img_request);
 }

+static void rbd_img_obj_callback(struct rbd_obj_request *obj_request)
+{
+	struct rbd_img_request *img_request;
+	u32 which = obj_request->which;
+	bool more = true;
+
+	img_request = obj_request->img_request;
+
+	dout("%s: img %p obj %p\n", __func__, img_request, obj_request);
+	rbd_assert(img_request != NULL);
+	rbd_assert(img_request->rq != NULL);
+	rbd_assert(img_request->obj_request_count > 0);
+	rbd_assert(which != BAD_WHICH);
+	rbd_assert(which < img_request->obj_request_count);
+	rbd_assert(which >= img_request->next_completion);
+
+	spin_lock_irq(&img_request->completion_lock);
+	if (which != img_request->next_completion)
+		goto out;
+
+	for_each_obj_request_from(img_request, obj_request) {
+		unsigned int xferred;
+		int result;
+
+		rbd_assert(more);
+		rbd_assert(which < img_request->obj_request_count);
+
+		if (!obj_request_done_test(obj_request))
+			break;
+
+		rbd_assert(obj_request->xferred <= (u64) UINT_MAX);
+		xferred = (unsigned int) obj_request->xferred;
+		result = (int) obj_request->result;
+		if (result)
+			rbd_warn(NULL, "obj_request %s result %d xferred %u\n",
+				img_request->write_request ? "write" : "read",
+				result, xferred);
+
+		more = blk_end_request(img_request->rq, result, xferred);
+		which++;
+	}
+
+	rbd_assert(more ^ (which == img_request->obj_request_count));
+	img_request->next_completion = which;
+out:
+	spin_unlock_irq(&img_request->completion_lock);
+
+	if (!more)
+		rbd_img_request_complete(img_request);
+}
+
 static int rbd_img_request_fill_bio(struct rbd_img_request *img_request,
 					struct bio *bio_list)