Skip to content

Commit 15e52d9

Browse files
committed
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client
Pull Ceph fix from Sage Weil: "This fixes a corner case for cloned RBD images" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client: rbd: handle parent_overlap on writes correctly
2 parents d91d66e + 9638556 commit 15e52d9

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

drivers/block/rbd.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1431,6 +1431,14 @@ static bool obj_request_exists_test(struct rbd_obj_request *obj_request)
14311431
return test_bit(OBJ_REQ_EXISTS, &obj_request->flags) != 0;
14321432
}
14331433

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+
14341442
static void rbd_obj_request_get(struct rbd_obj_request *obj_request)
14351443
{
14361444
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)
27482756
*/
27492757
if (!img_request_write_test(img_request) ||
27502758
!img_request_layered_test(img_request) ||
2751-
rbd_dev->parent_overlap <= obj_request->img_offset ||
2759+
!obj_request_overlaps_parent(obj_request) ||
27522760
((known = obj_request_known_test(obj_request)) &&
27532761
obj_request_exists_test(obj_request))) {
27542762

0 commit comments

Comments
 (0)