|
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 |
|