Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 373466
b: refs/heads/master
c: 57acbaa
h: refs/heads/master
v: v3
  • Loading branch information
Alex Elder authored and Sage Weil committed May 2, 2013
1 parent 8ddea7b commit 3ae55f3
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 22 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b155e86cf619886388d80ec298b0f13694c83595
refs/heads/master: 57acbaa7fb00b6e1a74d29aaaaf273ed8cb4dabc
51 changes: 30 additions & 21 deletions trunk/drivers/block/rbd.c
Original file line number Diff line number Diff line change
Expand Up @@ -1094,40 +1094,39 @@ static struct bio *bio_chain_clone_range(struct bio **bio_src,
* each flag, once its value is set to 1 it is never reset to 0
* again.
*/
static void obj_request_done_set(struct rbd_obj_request *obj_request)
static void obj_request_img_data_set(struct rbd_obj_request *obj_request)
{
if (test_and_set_bit(OBJ_REQ_DONE, &obj_request->flags)) {
struct rbd_img_request *img_request = obj_request->img_request;
if (test_and_set_bit(OBJ_REQ_IMG_DATA, &obj_request->flags)) {
struct rbd_device *rbd_dev;

rbd_dev = img_request ? img_request->rbd_dev : NULL;
rbd_warn(rbd_dev, "obj_request %p already marked done\n",
rbd_dev = obj_request->img_request->rbd_dev;
rbd_warn(rbd_dev, "obj_request %p already marked img_data\n",
obj_request);
}
}

static bool obj_request_done_test(struct rbd_obj_request *obj_request)
static bool obj_request_img_data_test(struct rbd_obj_request *obj_request)
{
smp_mb();
return test_bit(OBJ_REQ_DONE, &obj_request->flags) != 0;
return test_bit(OBJ_REQ_IMG_DATA, &obj_request->flags) != 0;
}

static void obj_request_img_data_set(struct rbd_obj_request *obj_request)
static void obj_request_done_set(struct rbd_obj_request *obj_request)
{
if (test_and_set_bit(OBJ_REQ_IMG_DATA, &obj_request->flags)) {
struct rbd_img_request *img_request = obj_request->img_request;
struct rbd_device *rbd_dev;
if (test_and_set_bit(OBJ_REQ_DONE, &obj_request->flags)) {
struct rbd_device *rbd_dev = NULL;

rbd_dev = img_request ? img_request->rbd_dev : NULL;
rbd_warn(rbd_dev, "obj_request %p already marked img_data\n",
if (obj_request_img_data_test(obj_request))
rbd_dev = obj_request->img_request->rbd_dev;
rbd_warn(rbd_dev, "obj_request %p already marked done\n",
obj_request);
}
}

static bool obj_request_img_data_test(struct rbd_obj_request *obj_request)
static bool obj_request_done_test(struct rbd_obj_request *obj_request)
{
smp_mb();
return test_bit(OBJ_REQ_IMG_DATA, &obj_request->flags) != 0;
return test_bit(OBJ_REQ_DONE, &obj_request->flags) != 0;
}

static void rbd_obj_request_get(struct rbd_obj_request *obj_request)
Expand Down Expand Up @@ -1338,8 +1337,16 @@ static void rbd_osd_trivial_callback(struct rbd_obj_request *obj_request)

static void rbd_osd_read_callback(struct rbd_obj_request *obj_request)
{
struct rbd_img_request *img_request = obj_request->img_request;
bool layered = img_request && img_request_layered_test(img_request);
struct rbd_img_request *img_request = NULL;
bool layered = false;

if (obj_request_img_data_test(obj_request)) {
img_request = obj_request->img_request;
layered = img_request && img_request_layered_test(img_request);
} else {
img_request = NULL;
layered = false;
}

dout("%s: obj %p img %p result %d %llu/%llu\n", __func__,
obj_request, img_request, obj_request->result,
Expand Down Expand Up @@ -1382,10 +1389,12 @@ static void rbd_osd_req_callback(struct ceph_osd_request *osd_req,

dout("%s: osd_req %p msg %p\n", __func__, osd_req, msg);
rbd_assert(osd_req == obj_request->osd_req);
rbd_assert(obj_request_img_data_test(obj_request) ^
!obj_request->img_request);
rbd_assert(obj_request_img_data_test(obj_request) ^
(obj_request->which == BAD_WHICH));
if (obj_request_img_data_test(obj_request)) {
rbd_assert(obj_request->img_request);
rbd_assert(obj_request->which != BAD_WHICH);
} else {
rbd_assert(obj_request->which == BAD_WHICH);
}

if (osd_req->r_result < 0)
obj_request->result = osd_req->r_result;
Expand Down

0 comments on commit 3ae55f3

Please sign in to comment.