Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit deb236b3 authored by Ilya Dryomov's avatar Ilya Dryomov Committed by Yan, Zheng
Browse files

rbd: num_ops parameter for rbd_osd_req_create()



In preparation for prefixing rbd writes with an allocation hint
introduce a num_ops parameter for rbd_osd_req_create().  The rationale
is that not every write request is a write op that needs to be prefixed
(e.g. watch op), so the num_ops logic needs to be in the callers.

Signed-off-by: default avatarIlya Dryomov <ilya.dryomov@inktank.com>
Reviewed-by: default avatarSage Weil <sage@inktank.com>
Reviewed-by: default avatarAlex Elder <elder@linaro.org>
parent 7cc69d42
Loading
Loading
Loading
Loading
+18 −10
Original line number Original line Diff line number Diff line
@@ -1718,6 +1718,7 @@ static void rbd_osd_req_format_write(struct rbd_obj_request *obj_request)
static struct ceph_osd_request *rbd_osd_req_create(
static struct ceph_osd_request *rbd_osd_req_create(
					struct rbd_device *rbd_dev,
					struct rbd_device *rbd_dev,
					bool write_request,
					bool write_request,
					unsigned int num_ops,
					struct rbd_obj_request *obj_request)
					struct rbd_obj_request *obj_request)
{
{
	struct ceph_snap_context *snapc = NULL;
	struct ceph_snap_context *snapc = NULL;
@@ -1733,10 +1734,13 @@ static struct ceph_osd_request *rbd_osd_req_create(
			snapc = img_request->snapc;
			snapc = img_request->snapc;
	}
	}


	/* Allocate and initialize the request, for the single op */
	rbd_assert(num_ops == 1);

	/* Allocate and initialize the request, for the num_ops ops */


	osdc = &rbd_dev->rbd_client->client->osdc;
	osdc = &rbd_dev->rbd_client->client->osdc;
	osd_req = ceph_osdc_alloc_request(osdc, snapc, 1, false, GFP_ATOMIC);
	osd_req = ceph_osdc_alloc_request(osdc, snapc, num_ops, false,
					  GFP_ATOMIC);
	if (!osd_req)
	if (!osd_req)
		return NULL;	/* ENOMEM */
		return NULL;	/* ENOMEM */


@@ -2220,7 +2224,7 @@ static int rbd_img_request_fill(struct rbd_img_request *img_request,
			pages += page_count;
			pages += page_count;
		}
		}


		osd_req = rbd_osd_req_create(rbd_dev, write_request,
		osd_req = rbd_osd_req_create(rbd_dev, write_request, 1,
					     obj_request);
					     obj_request);
		if (!osd_req)
		if (!osd_req)
			goto out_unwind;
			goto out_unwind;
@@ -2602,7 +2606,7 @@ static int rbd_img_obj_exists_submit(struct rbd_obj_request *obj_request)


	rbd_assert(obj_request->img_request);
	rbd_assert(obj_request->img_request);
	rbd_dev = obj_request->img_request->rbd_dev;
	rbd_dev = obj_request->img_request->rbd_dev;
	stat_request->osd_req = rbd_osd_req_create(rbd_dev, false,
	stat_request->osd_req = rbd_osd_req_create(rbd_dev, false, 1,
						   stat_request);
						   stat_request);
	if (!stat_request->osd_req)
	if (!stat_request->osd_req)
		goto out;
		goto out;
@@ -2806,7 +2810,8 @@ static int rbd_obj_notify_ack_sync(struct rbd_device *rbd_dev, u64 notify_id)
		return -ENOMEM;
		return -ENOMEM;


	ret = -ENOMEM;
	ret = -ENOMEM;
	obj_request->osd_req = rbd_osd_req_create(rbd_dev, false, obj_request);
	obj_request->osd_req = rbd_osd_req_create(rbd_dev, false, 1,
						  obj_request);
	if (!obj_request->osd_req)
	if (!obj_request->osd_req)
		goto out;
		goto out;


@@ -2869,7 +2874,8 @@ static int __rbd_dev_header_watch_sync(struct rbd_device *rbd_dev, bool start)
	if (!obj_request)
	if (!obj_request)
		goto out_cancel;
		goto out_cancel;


	obj_request->osd_req = rbd_osd_req_create(rbd_dev, true, obj_request);
	obj_request->osd_req = rbd_osd_req_create(rbd_dev, true, 1,
						  obj_request);
	if (!obj_request->osd_req)
	if (!obj_request->osd_req)
		goto out_cancel;
		goto out_cancel;


@@ -2977,7 +2983,8 @@ static int rbd_obj_method_sync(struct rbd_device *rbd_dev,
	obj_request->pages = pages;
	obj_request->pages = pages;
	obj_request->page_count = page_count;
	obj_request->page_count = page_count;


	obj_request->osd_req = rbd_osd_req_create(rbd_dev, false, obj_request);
	obj_request->osd_req = rbd_osd_req_create(rbd_dev, false, 1,
						  obj_request);
	if (!obj_request->osd_req)
	if (!obj_request->osd_req)
		goto out;
		goto out;


@@ -3210,7 +3217,8 @@ static int rbd_obj_read_sync(struct rbd_device *rbd_dev,
	obj_request->pages = pages;
	obj_request->pages = pages;
	obj_request->page_count = page_count;
	obj_request->page_count = page_count;


	obj_request->osd_req = rbd_osd_req_create(rbd_dev, false, obj_request);
	obj_request->osd_req = rbd_osd_req_create(rbd_dev, false, 1,
						  obj_request);
	if (!obj_request->osd_req)
	if (!obj_request->osd_req)
		goto out;
		goto out;