From: Ilya Dryomov Date: Tue, 13 Feb 2024 14:25:41 +0000 (+0100) Subject: Revert "rbd: get snapshot context after exclusive lock is ensured to be held" X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a64ccd305b2882c69664fe3c23e858e1968c6dea;p=ceph-client.git Revert "rbd: get snapshot context after exclusive lock is ensured to be held" This reverts commit 870611e4877eff1e8413c3fb92a585e45d5291f6. --- diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c index 1dfbb43d7294..cce2ad3413de 100644 --- a/drivers/block/rbd.c +++ b/drivers/block/rbd.c @@ -1339,8 +1339,6 @@ static bool rbd_obj_is_tail(struct rbd_obj_request *obj_req) */ static void rbd_obj_set_copyup_enabled(struct rbd_obj_request *obj_req) { - rbd_assert(obj_req->img_request->snapc); - if (obj_req->img_request->op_type == OBJ_OP_DISCARD) { dout("%s %p objno %llu discard\n", __func__, obj_req, obj_req->ex.oe_objno); @@ -1461,7 +1459,6 @@ __rbd_obj_add_osd_request(struct rbd_obj_request *obj_req, static struct ceph_osd_request * rbd_obj_add_osd_request(struct rbd_obj_request *obj_req, int num_ops) { - rbd_assert(obj_req->img_request->snapc); return __rbd_obj_add_osd_request(obj_req, obj_req->img_request->snapc, num_ops); } @@ -1598,18 +1595,15 @@ static void rbd_img_request_init(struct rbd_img_request *img_request, mutex_init(&img_request->state_mutex); } -/* - * Only snap_id is captured here, for reads. For writes, snapshot - * context is captured in rbd_img_object_requests() after exclusive - * lock is ensured to be held. - */ static void rbd_img_capture_header(struct rbd_img_request *img_req) { struct rbd_device *rbd_dev = img_req->rbd_dev; lockdep_assert_held(&rbd_dev->header_rwsem); - if (!rbd_img_is_write(img_req)) + if (rbd_img_is_write(img_req)) + img_req->snapc = ceph_get_snap_context(rbd_dev->header.snapc); + else img_req->snap_id = rbd_dev->spec->snap_id; if (rbd_dev_parent_get(rbd_dev)) @@ -3492,19 +3486,9 @@ static int rbd_img_exclusive_lock(struct rbd_img_request *img_req) static void rbd_img_object_requests(struct rbd_img_request *img_req) { - struct rbd_device *rbd_dev = img_req->rbd_dev; struct rbd_obj_request *obj_req; rbd_assert(!img_req->pending.result && !img_req->pending.num_pending); - rbd_assert(!need_exclusive_lock(img_req) || - __rbd_is_lock_owner(rbd_dev)); - - if (rbd_img_is_write(img_req)) { - rbd_assert(!img_req->snapc); - down_read(&rbd_dev->header_rwsem); - img_req->snapc = ceph_get_snap_context(rbd_dev->header.snapc); - up_read(&rbd_dev->header_rwsem); - } for_each_obj_request(img_req, obj_req) { int result = 0; @@ -3522,6 +3506,7 @@ static void rbd_img_object_requests(struct rbd_img_request *img_req) static bool rbd_img_advance(struct rbd_img_request *img_req, int *result) { + struct rbd_device *rbd_dev = img_req->rbd_dev; int ret; again: @@ -3542,6 +3527,9 @@ again: if (*result) return true; + rbd_assert(!need_exclusive_lock(img_req) || + __rbd_is_lock_owner(rbd_dev)); + rbd_img_object_requests(img_req); if (!img_req->pending.num_pending) { *result = img_req->pending.result; @@ -4062,10 +4050,6 @@ static int rbd_post_acquire_action(struct rbd_device *rbd_dev) { int ret; - ret = rbd_dev_refresh(rbd_dev); - if (ret) - return ret; - if (rbd_dev->header.features & RBD_FEATURE_OBJECT_MAP) { ret = rbd_object_map_open(rbd_dev); if (ret)