aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/block/rbd.c8
-rw-r--r--include/linux/ceph/osd_client.h4
-rw-r--r--net/ceph/osd_client.c15
3 files changed, 9 insertions, 18 deletions
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index bdbaa4cfd9d3..d1445df6398a 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -1148,14 +1148,18 @@ static int rbd_do_request(struct request *rq,
1148 (unsigned long long) len, coll, coll_index); 1148 (unsigned long long) len, coll, coll_index);
1149 1149
1150 osdc = &rbd_dev->rbd_client->client->osdc; 1150 osdc = &rbd_dev->rbd_client->client->osdc;
1151 osd_req = ceph_osdc_alloc_request(osdc, snapc, ops, 1151 osd_req = ceph_osdc_alloc_request(osdc, snapc, ops, false, GFP_NOIO);
1152 false, GFP_NOIO, pages, bio);
1153 if (!osd_req) { 1152 if (!osd_req) {
1154 ret = -ENOMEM; 1153 ret = -ENOMEM;
1155 goto done_pages; 1154 goto done_pages;
1156 } 1155 }
1157 1156
1158 osd_req->r_flags = flags; 1157 osd_req->r_flags = flags;
1158 osd_req->r_pages = pages;
1159 if (bio) {
1160 osd_req->r_bio = bio;
1161 bio_get(osd_req->r_bio);
1162 }
1159 osd_req->r_callback = rbd_cb; 1163 osd_req->r_callback = rbd_cb;
1160 1164
1161 rbd_req->rq = rq; 1165 rbd_req->rq = rq;
diff --git a/include/linux/ceph/osd_client.h b/include/linux/ceph/osd_client.h
index 6ddda5bbd1a6..75f56d372d44 100644
--- a/include/linux/ceph/osd_client.h
+++ b/include/linux/ceph/osd_client.h
@@ -216,9 +216,7 @@ extern struct ceph_osd_request *ceph_osdc_alloc_request(struct ceph_osd_client *
216 struct ceph_snap_context *snapc, 216 struct ceph_snap_context *snapc,
217 struct ceph_osd_req_op *ops, 217 struct ceph_osd_req_op *ops,
218 bool use_mempool, 218 bool use_mempool,
219 gfp_t gfp_flags, 219 gfp_t gfp_flags);
220 struct page **pages,
221 struct bio *bio);
222 220
223extern void ceph_osdc_build_request(struct ceph_osd_request *req, 221extern void ceph_osdc_build_request(struct ceph_osd_request *req,
224 u64 off, u64 len, 222 u64 off, u64 len,
diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c
index 77ce1edaa07d..bdc3bb12bfd5 100644
--- a/net/ceph/osd_client.c
+++ b/net/ceph/osd_client.c
@@ -174,9 +174,7 @@ struct ceph_osd_request *ceph_osdc_alloc_request(struct ceph_osd_client *osdc,
174 struct ceph_snap_context *snapc, 174 struct ceph_snap_context *snapc,
175 struct ceph_osd_req_op *ops, 175 struct ceph_osd_req_op *ops,
176 bool use_mempool, 176 bool use_mempool,
177 gfp_t gfp_flags, 177 gfp_t gfp_flags)
178 struct page **pages,
179 struct bio *bio)
180{ 178{
181 struct ceph_osd_request *req; 179 struct ceph_osd_request *req;
182 struct ceph_msg *msg; 180 struct ceph_msg *msg;
@@ -237,13 +235,6 @@ struct ceph_osd_request *ceph_osdc_alloc_request(struct ceph_osd_client *osdc,
237 memset(msg->front.iov_base, 0, msg->front.iov_len); 235 memset(msg->front.iov_base, 0, msg->front.iov_len);
238 236
239 req->r_request = msg; 237 req->r_request = msg;
240 req->r_pages = pages;
241#ifdef CONFIG_BLOCK
242 if (bio) {
243 req->r_bio = bio;
244 bio_get(req->r_bio);
245 }
246#endif
247 238
248 return req; 239 return req;
249} 240}
@@ -439,9 +430,7 @@ struct ceph_osd_request *ceph_osdc_new_request(struct ceph_osd_client *osdc,
439 } else 430 } else
440 ops[1].op = 0; 431 ops[1].op = 0;
441 432
442 req = ceph_osdc_alloc_request(osdc, snapc, ops, 433 req = ceph_osdc_alloc_request(osdc, snapc, ops, use_mempool, GFP_NOFS);
443 use_mempool,
444 GFP_NOFS, NULL, NULL);
445 if (!req) 434 if (!req)
446 return ERR_PTR(-ENOMEM); 435 return ERR_PTR(-ENOMEM);
447 req->r_flags = flags; 436 req->r_flags = flags;