Luís Henriques 214798
From: Xiubo Li <xiubli@redhat.com>
Luís Henriques 214798
Date: Fri, 5 Aug 2022 12:33:03 +0800
Luís Henriques 214798
Subject: ceph: wake up the waiters if any new caps comes
Luís Henriques 214798
Git-commit: f791357330b0043ec953ce122ab7519af4b9d24a
Luís Henriques 214798
Patch-mainline: v6.1-rc1
Luís Henriques 214798
References: jsc#SES-1880
Luís Henriques 214798
Luís Henriques 214798
When new caps comes we need to wake up the waiters and also when
Luís Henriques 214798
revoking the caps, there also could be new caps comes.
Luís Henriques 214798
Luís Henriques 214798
Link: https://tracker.ceph.com/issues/54044
Luís Henriques 214798
Signed-off-by: Xiubo Li <xiubli@redhat.com>
Luís Henriques 214798
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Luís Henriques 214798
Acked-by: Luis Henriques <lhenriques@suse.de>
Luís Henriques 214798
---
Luís Henriques 214798
 fs/ceph/caps.c | 4 ++++
Luís Henriques 214798
 1 file changed, 4 insertions(+)
Luís Henriques 214798
Luís Henriques 214798
diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
Luís Henriques 214798
index 53cfe026b3ea..0ddd91eadbce 100644
Luís Henriques 214798
--- a/fs/ceph/caps.c
Luís Henriques 214798
+++ b/fs/ceph/caps.c
Luís Henriques 214798
@@ -754,6 +754,7 @@ void ceph_add_cap(struct inode *inode,
Luís Henriques 214798
 	cap->issue_seq = seq;
Luís Henriques 214798
 	cap->mseq = mseq;
Luís Henriques 214798
 	cap->cap_gen = gen;
Luís Henriques 214798
+	wake_up_all(&ci->i_cap_wq);
Luís Henriques 214798
 }
Luís Henriques 214798
 
Luís Henriques 214798
 /*
Luís Henriques 214798
@@ -3550,6 +3551,9 @@ static void handle_cap_grant(struct inode *inode,
Luís Henriques 214798
 			check_caps = 1; /* check auth cap only */
Luís Henriques 214798
 		else
Luís Henriques 214798
 			check_caps = 2; /* check all caps */
Luís Henriques 214798
+		/* If there is new caps, try to wake up the waiters */
Luís Henriques 214798
+		if (~cap->issued & newcaps)
Luís Henriques 214798
+			wake = true;
Luís Henriques 214798
 		cap->issued = newcaps;
Luís Henriques 214798
 		cap->implemented |= newcaps;
Luís Henriques 214798
 	} else if (cap->issued == newcaps) {
Luís Henriques 214798