Patch "ceph: fix flush_snap logic after putting caps" has been added to the 5.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    ceph: fix flush_snap logic after putting caps

to the 5.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     ceph-fix-flush_snap-logic-after-putting-caps.patch
and it can be found in the queue-5.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 5fd3d4041ba6954eaead9dde9e9c4bad104d9ca0
Author: Jeff Layton <jlayton@xxxxxxxxxx>
Date:   Thu Dec 10 13:35:46 2020 -0500

    ceph: fix flush_snap logic after putting caps
    
    [ Upstream commit 64f36da5625f7f9853b86750eaa89d499d16a2e9 ]
    
    A primary reason for skipping ceph_check_caps after putting the
    references was to avoid the locking in ceph_check_caps during a
    reconnect. __ceph_put_cap_refs can still call ceph_flush_snaps in that
    case though, and that takes many of the same inconvenient locks.
    
    Fix the logic in __ceph_put_cap_refs to skip flushing snaps when the
    skip_checking_caps flag is set.
    
    Fixes: e64f44a88465 ("ceph: skip checking caps when session reconnecting and releasing reqs")
    Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx>
    Reviewed-by: Ilya Dryomov <idryomov@xxxxxxxxx>
    Signed-off-by: Ilya Dryomov <idryomov@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
index 2b200b5a44c3a..576d01275bbd7 100644
--- a/fs/ceph/caps.c
+++ b/fs/ceph/caps.c
@@ -3092,10 +3092,12 @@ static void __ceph_put_cap_refs(struct ceph_inode_info *ci, int had,
 	dout("put_cap_refs %p had %s%s%s\n", inode, ceph_cap_string(had),
 	     last ? " last" : "", put ? " put" : "");
 
-	if (last && !skip_checking_caps)
-		ceph_check_caps(ci, 0, NULL);
-	else if (flushsnaps)
-		ceph_flush_snaps(ci, NULL);
+	if (!skip_checking_caps) {
+		if (last)
+			ceph_check_caps(ci, 0, NULL);
+		else if (flushsnaps)
+			ceph_flush_snaps(ci, NULL);
+	}
 	if (wake)
 		wake_up_all(&ci->i_cap_wq);
 	while (put-- > 0)



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux