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
This commit is contained in:
Коммит
15e52d9a81
|
@ -1431,6 +1431,14 @@ static bool obj_request_exists_test(struct rbd_obj_request *obj_request)
|
|||
return test_bit(OBJ_REQ_EXISTS, &obj_request->flags) != 0;
|
||||
}
|
||||
|
||||
static bool obj_request_overlaps_parent(struct rbd_obj_request *obj_request)
|
||||
{
|
||||
struct rbd_device *rbd_dev = obj_request->img_request->rbd_dev;
|
||||
|
||||
return obj_request->img_offset <
|
||||
round_up(rbd_dev->parent_overlap, rbd_obj_bytes(&rbd_dev->header));
|
||||
}
|
||||
|
||||
static void rbd_obj_request_get(struct rbd_obj_request *obj_request)
|
||||
{
|
||||
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)
|
|||
*/
|
||||
if (!img_request_write_test(img_request) ||
|
||||
!img_request_layered_test(img_request) ||
|
||||
rbd_dev->parent_overlap <= obj_request->img_offset ||
|
||||
!obj_request_overlaps_parent(obj_request) ||
|
||||
((known = obj_request_known_test(obj_request)) &&
|
||||
obj_request_exists_test(obj_request))) {
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче