summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorAlex Elder <elder@inktank.com>2012-11-13 21:11:15 -0600
committerAlex Elder <elder@inktank.com>2013-01-17 16:34:57 -0600
commitae7ca4a35b1f5df86e2c32b2cfc01a8d528c7b8c (patch)
treea6dfed1fd8f50cf59cd72be27408f51ee621607c /drivers
parentd07c09589f533db9ab500ac38151bc9f3a4d0648 (diff)
downloadlinux-stable-ae7ca4a35b1f5df86e2c32b2cfc01a8d528c7b8c.tar.gz
linux-stable-ae7ca4a35b1f5df86e2c32b2cfc01a8d528c7b8c.tar.bz2
linux-stable-ae7ca4a35b1f5df86e2c32b2cfc01a8d528c7b8c.zip
libceph: pass num_op with ops
Both ceph_osdc_alloc_request() and ceph_osdc_build_request() are provided an array of ceph osd request operations. Rather than just passing the number of operations in the array, the caller is required append an additional zeroed operation structure to signal the end of the array. All callers know the number of operations at the time these functions are called, so drop the silly zero entry and supply that number directly. As a result, get_num_ops() is no longer needed. This also means that ceph_osdc_alloc_request() never uses its ops argument, so that can be dropped. Also rbd_create_rw_ops() no longer needs to add one to reserve room for the additional op. Signed-off-by: Alex Elder <elder@inktank.com> Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/block/rbd.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index b6872d3cb04c..88de8ccb29bd 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -1026,12 +1026,12 @@ out_err:
/*
* helpers for osd request op vectors.
*/
-static struct ceph_osd_req_op *rbd_create_rw_ops(int num_ops,
+static struct ceph_osd_req_op *rbd_create_rw_ops(int num_op,
int opcode, u32 payload_len)
{
struct ceph_osd_req_op *ops;
- ops = kzalloc(sizeof (*ops) * (num_ops + 1), GFP_NOIO);
+ ops = kzalloc(num_op * sizeof (*ops), GFP_NOIO);
if (!ops)
return NULL;
@@ -1149,7 +1149,7 @@ static int rbd_do_request(struct request *rq,
(unsigned long long) len, coll, coll_index);
osdc = &rbd_dev->rbd_client->client->osdc;
- osd_req = ceph_osdc_alloc_request(osdc, snapc, ops, false, GFP_NOIO);
+ osd_req = ceph_osdc_alloc_request(osdc, snapc, num_op, false, GFP_NOIO);
if (!osd_req) {
ret = -ENOMEM;
goto done_pages;
@@ -1178,7 +1178,8 @@ static int rbd_do_request(struct request *rq,
ofs, &len, &bno, osd_req, ops);
rbd_assert(ret == 0);
- ceph_osdc_build_request(osd_req, ofs, len, ops, snapc, snapid, &mtime);
+ ceph_osdc_build_request(osd_req, ofs, len, num_op, ops,
+ snapc, snapid, &mtime);
if (linger_req) {
ceph_osdc_set_request_linger(osdc, osd_req);