diff options
-rw-r--r-- | drivers/block/rbd.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c index bbeb404b3a07..b2c98c1bc037 100644 --- a/drivers/block/rbd.c +++ b/drivers/block/rbd.c | |||
@@ -1431,6 +1431,14 @@ static bool obj_request_exists_test(struct rbd_obj_request *obj_request) | |||
1431 | return test_bit(OBJ_REQ_EXISTS, &obj_request->flags) != 0; | 1431 | return test_bit(OBJ_REQ_EXISTS, &obj_request->flags) != 0; |
1432 | } | 1432 | } |
1433 | 1433 | ||
1434 | static bool obj_request_overlaps_parent(struct rbd_obj_request *obj_request) | ||
1435 | { | ||
1436 | struct rbd_device *rbd_dev = obj_request->img_request->rbd_dev; | ||
1437 | |||
1438 | return obj_request->img_offset < | ||
1439 | round_up(rbd_dev->parent_overlap, rbd_obj_bytes(&rbd_dev->header)); | ||
1440 | } | ||
1441 | |||
1434 | static void rbd_obj_request_get(struct rbd_obj_request *obj_request) | 1442 | static void rbd_obj_request_get(struct rbd_obj_request *obj_request) |
1435 | { | 1443 | { |
1436 | dout("%s: obj %p (was %d)\n", __func__, obj_request, | 1444 | dout("%s: obj %p (was %d)\n", __func__, obj_request, |
@@ -2748,7 +2756,7 @@ static int rbd_img_obj_request_submit(struct rbd_obj_request *obj_request) | |||
2748 | */ | 2756 | */ |
2749 | if (!img_request_write_test(img_request) || | 2757 | if (!img_request_write_test(img_request) || |
2750 | !img_request_layered_test(img_request) || | 2758 | !img_request_layered_test(img_request) || |
2751 | rbd_dev->parent_overlap <= obj_request->img_offset || | 2759 | !obj_request_overlaps_parent(obj_request) || |
2752 | ((known = obj_request_known_test(obj_request)) && | 2760 | ((known = obj_request_known_test(obj_request)) && |
2753 | obj_request_exists_test(obj_request))) { | 2761 | obj_request_exists_test(obj_request))) { |
2754 | 2762 | ||