Skip to content

Commit

Permalink
rbd: end request on error in rbd_do_request() caller
Browse files Browse the repository at this point in the history
Only one of the three callers of rbd_do_request() provide a
collection structure to aggregate status.

If an error occurs in rbd_do_request(), have the caller
take care of calling rbd_coll_end_req() if necessary in
that one spot.

Signed-off-by: Alex Elder <elder@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
  • Loading branch information
Alex Elder authored and Alex Elder committed Jan 17, 2013
1 parent 8295cda commit cd323ac
Showing 1 changed file with 4 additions and 7 deletions.
11 changes: 4 additions & 7 deletions drivers/block/rbd.c
Original file line number Diff line number Diff line change
Expand Up @@ -1126,12 +1126,8 @@ static int rbd_do_request(struct request *rq,
struct ceph_osd_client *osdc;

rbd_req = kzalloc(sizeof(*rbd_req), GFP_NOIO);
if (!rbd_req) {
if (coll)
rbd_coll_end_req_index(rq, coll, coll_index,
(s32)-ENOMEM, len);
if (!rbd_req)
return -ENOMEM;
}

if (coll) {
rbd_req->coll = coll;
Expand Down Expand Up @@ -1206,7 +1202,6 @@ static int rbd_do_request(struct request *rq,
bio_chain_put(rbd_req->bio);
ceph_osdc_put_request(osd_req);
done_pages:
rbd_coll_end_req(rbd_req, (s32)ret, len);
kfree(rbd_req);
return ret;
}
Expand Down Expand Up @@ -1359,7 +1354,9 @@ static int rbd_do_op(struct request *rq,
ops,
coll, coll_index,
rbd_req_cb, 0, NULL);

if (ret < 0)
rbd_coll_end_req_index(rq, coll, coll_index,
(s32)ret, seg_len);
rbd_destroy_ops(ops);
done:
kfree(seg_name);
Expand Down

0 comments on commit cd323ac

Please sign in to comment.