aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Elder <elder@inktank.com>2012-10-10 18:59:29 -0700
committerAlex Elder <elder@inktank.com>2012-10-26 17:18:08 -0500
commitff2e4bb5b32f89c455979a4222a9b78007cde254 (patch)
treeb50576687902d04a47ab1a9347f054a55b05ebce
parent13f4042c05b6a1a638ccab3f0cabdb84993803a2 (diff)
downloadkernel_goldelico_gta04-ff2e4bb5b32f89c455979a4222a9b78007cde254.zip
kernel_goldelico_gta04-ff2e4bb5b32f89c455979a4222a9b78007cde254.tar.gz
kernel_goldelico_gta04-ff2e4bb5b32f89c455979a4222a9b78007cde254.tar.bz2
rbd: drop rbd_do_op() opcode and flags
The only callers of rbd_do_op() are in rbd_rq_fn(), where call one is used for writes and the other used for reads. The request passed to rbd_do_op() already encodes the I/O direction, and that information can be used inside the function to set the opcode and flags value (rather than passing them in as arguments). So get rid of the opcode and flags arguments to rbd_do_op(). Signed-off-by: Alex Elder <elder@inktank.com> Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
-rw-r--r--drivers/block/rbd.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index 8f2c39a..a29c6d2 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -1164,7 +1164,6 @@ static int rbd_do_op(struct request *rq,
struct rbd_device *rbd_dev,
struct ceph_snap_context *snapc,
u64 snapid,
- int opcode, int flags,
u64 ofs, u64 len,
struct bio *bio,
struct rbd_req_coll *coll,
@@ -1176,6 +1175,8 @@ static int rbd_do_op(struct request *rq,
int ret;
struct ceph_osd_req_op *ops;
u32 payload_len;
+ int opcode;
+ int flags;
seg_name = rbd_segment_name(rbd_dev, ofs);
if (!seg_name)
@@ -1183,7 +1184,15 @@ static int rbd_do_op(struct request *rq,
seg_len = rbd_segment_length(rbd_dev, ofs, len);
seg_ofs = rbd_segment_offset(rbd_dev, ofs);
- payload_len = (flags & CEPH_OSD_FLAG_WRITE ? seg_len : 0);
+ if (rq_data_dir(rq) == WRITE) {
+ opcode = CEPH_OSD_OP_WRITE;
+ flags = CEPH_OSD_FLAG_WRITE|CEPH_OSD_FLAG_ONDISK;
+ payload_len = seg_len;
+ } else {
+ opcode = CEPH_OSD_OP_READ;
+ flags = CEPH_OSD_FLAG_READ;
+ payload_len = 0;
+ }
ret = -ENOMEM;
ops = rbd_create_rw_ops(1, opcode, payload_len);
@@ -1519,16 +1528,11 @@ static void rbd_rq_fn(struct request_queue *q)
if (do_write)
(void) rbd_do_op(rq, rbd_dev,
snapc, CEPH_NOSNAP,
- CEPH_OSD_OP_WRITE,
- CEPH_OSD_FLAG_WRITE |
- CEPH_OSD_FLAG_ONDISK,
ofs, op_size, bio,
coll, cur_seg);
else
(void) rbd_do_op(rq, rbd_dev,
NULL, rbd_dev->mapping.snap_id,
- CEPH_OSD_OP_READ,
- CEPH_OSD_FLAG_READ,
ofs, op_size, bio,
coll, cur_seg);
next_seg: