]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-client.git/commitdiff
Revert "rbd: get snapshot context after exclusive lock is ensured to be held" wip-revert-exclusive-lock-snapc
authorIlya Dryomov <idryomov@gmail.com>
Tue, 13 Feb 2024 14:25:41 +0000 (15:25 +0100)
committerIlya Dryomov <idryomov@gmail.com>
Tue, 13 Feb 2024 14:25:41 +0000 (15:25 +0100)
This reverts commit 870611e4877eff1e8413c3fb92a585e45d5291f6.

drivers/block/rbd.c

index 1dfbb43d7294110a64971e2d6993703f475666cc..cce2ad3413dec91c54751ba757cef6e4cb50fc98 100644 (file)
@@ -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)