diff options
author | Alex Elder <elder@inktank.com> | 2012-11-14 13:25:18 -0500 |
---|---|---|
committer | Alex Elder <elder@inktank.com> | 2013-01-17 17:34:58 -0500 |
commit | e01e79273b251dbb35ff2522a688229b09481923 (patch) | |
tree | 17d777bb0e28b151de4cdf41882ee1d7ba75e5b1 /drivers/block/rbd.c | |
parent | 0829661863fb5c8031c1c5c119693ea157517783 (diff) |
rbd: open code rbd_calc_raw_layout()
This patch gets rid of rbd_calc_raw_layout() by simply open coding
it in its one caller.
Signed-off-by: Alex Elder <elder@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
Diffstat (limited to 'drivers/block/rbd.c')
-rw-r--r-- | drivers/block/rbd.c | 55 |
1 files changed, 18 insertions, 37 deletions
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c index eee0d3649dcf..f5f4e4a8fc87 100644 --- a/drivers/block/rbd.c +++ b/drivers/block/rbd.c | |||
@@ -1032,7 +1032,7 @@ static struct ceph_osd_req_op *rbd_create_rw_op(int opcode, u32 payload_len) | |||
1032 | return NULL; | 1032 | return NULL; |
1033 | /* | 1033 | /* |
1034 | * op extent offset and length will be set later on | 1034 | * op extent offset and length will be set later on |
1035 | * in calc_raw_layout() | 1035 | * after ceph_calc_file_object_mapping(). |
1036 | */ | 1036 | */ |
1037 | op->op = opcode; | 1037 | op->op = opcode; |
1038 | op->payload_len = payload_len; | 1038 | op->payload_len = payload_len; |
@@ -1101,40 +1101,6 @@ static void rbd_layout_init(struct ceph_file_layout *layout, u64 pool_id) | |||
1101 | layout->fl_pg_pool = cpu_to_le32((u32) pool_id); | 1101 | layout->fl_pg_pool = cpu_to_le32((u32) pool_id); |
1102 | } | 1102 | } |
1103 | 1103 | ||
1104 | int rbd_calc_raw_layout(struct ceph_file_layout *layout, | ||
1105 | u64 off, u64 *plen, u64 *bno, | ||
1106 | struct ceph_osd_request *req, | ||
1107 | struct ceph_osd_req_op *op) | ||
1108 | { | ||
1109 | u64 orig_len = *plen; | ||
1110 | u64 objoff, objlen; /* extent in object */ | ||
1111 | int r; | ||
1112 | |||
1113 | /* object extent? */ | ||
1114 | r = ceph_calc_file_object_mapping(layout, off, orig_len, bno, | ||
1115 | &objoff, &objlen); | ||
1116 | if (r < 0) | ||
1117 | return r; | ||
1118 | if (objlen < orig_len) { | ||
1119 | *plen = objlen; | ||
1120 | dout(" skipping last %llu, final file extent %llu~%llu\n", | ||
1121 | orig_len - *plen, off, *plen); | ||
1122 | } | ||
1123 | |||
1124 | if (op->op == CEPH_OSD_OP_READ || op->op == CEPH_OSD_OP_WRITE) { | ||
1125 | op->extent.offset = objoff; | ||
1126 | op->extent.length = objlen; | ||
1127 | } | ||
1128 | req->r_num_pages = calc_pages_for(off, *plen); | ||
1129 | req->r_page_alignment = off & ~PAGE_MASK; | ||
1130 | if (op->op == CEPH_OSD_OP_WRITE) | ||
1131 | op->payload_len = *plen; | ||
1132 | |||
1133 | dout("calc_layout bno=%llx %llu~%llu (%d pages)\n", | ||
1134 | *bno, objoff, objlen, req->r_num_pages); | ||
1135 | return 0; | ||
1136 | } | ||
1137 | |||
1138 | /* | 1104 | /* |
1139 | * Send ceph osd request | 1105 | * Send ceph osd request |
1140 | */ | 1106 | */ |
@@ -1158,6 +1124,8 @@ static int rbd_do_request(struct request *rq, | |||
1158 | struct ceph_osd_request *osd_req; | 1124 | struct ceph_osd_request *osd_req; |
1159 | int ret; | 1125 | int ret; |
1160 | u64 bno; | 1126 | u64 bno; |
1127 | u64 obj_off = 0; | ||
1128 | u64 obj_len = 0; | ||
1161 | struct timespec mtime = CURRENT_TIME; | 1129 | struct timespec mtime = CURRENT_TIME; |
1162 | struct rbd_request *rbd_req; | 1130 | struct rbd_request *rbd_req; |
1163 | struct ceph_osd_client *osdc; | 1131 | struct ceph_osd_client *osdc; |
@@ -1201,9 +1169,22 @@ static int rbd_do_request(struct request *rq, | |||
1201 | osd_req->r_oid_len = strlen(osd_req->r_oid); | 1169 | osd_req->r_oid_len = strlen(osd_req->r_oid); |
1202 | 1170 | ||
1203 | rbd_layout_init(&osd_req->r_file_layout, rbd_dev->spec->pool_id); | 1171 | rbd_layout_init(&osd_req->r_file_layout, rbd_dev->spec->pool_id); |
1204 | ret = rbd_calc_raw_layout(&osd_req->r_file_layout, | 1172 | ret = ceph_calc_file_object_mapping(&osd_req->r_file_layout, ofs, len, |
1205 | ofs, &len, &bno, osd_req, op); | 1173 | &bno, &obj_off, &obj_len); |
1206 | rbd_assert(ret == 0); | 1174 | rbd_assert(ret == 0); |
1175 | if (obj_len < len) { | ||
1176 | dout(" skipping last %llu, final file extent %llu~%llu\n", | ||
1177 | len - obj_len, ofs, obj_len); | ||
1178 | len = obj_len; | ||
1179 | } | ||
1180 | if (op->op == CEPH_OSD_OP_READ || op->op == CEPH_OSD_OP_WRITE) { | ||
1181 | op->extent.offset = obj_off; | ||
1182 | op->extent.length = obj_len; | ||
1183 | if (op->op == CEPH_OSD_OP_WRITE) | ||
1184 | op->payload_len = obj_len; | ||
1185 | } | ||
1186 | osd_req->r_num_pages = calc_pages_for(ofs, len); | ||
1187 | osd_req->r_page_alignment = ofs & ~PAGE_MASK; | ||
1207 | 1188 | ||
1208 | ceph_osdc_build_request(osd_req, ofs, len, 1, op, | 1189 | ceph_osdc_build_request(osd_req, ofs, len, 1, op, |
1209 | snapc, snapid, &mtime); | 1190 | snapc, snapid, &mtime); |