ceph: wake up the waiters if any new caps comes
authorXiubo Li <xiubli@redhat.com>
Fri, 5 Aug 2022 04:33:03 +0000 (12:33 +0800)
committerIlya Dryomov <idryomov@gmail.com>
Tue, 4 Oct 2022 17:18:08 +0000 (19:18 +0200)
When new caps comes we need to wake up the waiters and also when
revoking the caps, there also could be new caps comes.

Link: https://tracker.ceph.com/issues/54044
Signed-off-by: Xiubo Li <xiubli@redhat.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
fs/ceph/caps.c

index 53cfe02..0ddd91e 100644 (file)
@@ -754,6 +754,7 @@ void ceph_add_cap(struct inode *inode,
        cap->issue_seq = seq;
        cap->mseq = mseq;
        cap->cap_gen = gen;
+       wake_up_all(&ci->i_cap_wq);
 }
 
 /*
@@ -3550,6 +3551,9 @@ static void handle_cap_grant(struct inode *inode,
                        check_caps = 1; /* check auth cap only */
                else
                        check_caps = 2; /* check all caps */
+               /* If there is new caps, try to wake up the waiters */
+               if (~cap->issued & newcaps)
+                       wake = true;
                cap->issued = newcaps;
                cap->implemented |= newcaps;
        } else if (cap->issued == newcaps) {