Commit fb33c114 authored by Jeff Layton's avatar Jeff Layton Committed by Ilya Dryomov

ceph: flush release queue when handling caps for unknown inode

It's possible for the VFS to completely forget about an inode, but for
it to still be sitting on the cap release queue. If the MDS sends the
client a cap message for such an inode, it just ignores it today, which
can lead to a stall of up to 5s until the cap release queue is flushed.

If we get a cap message for an inode that can't be located, then go
ahead and flush the cap release queue.

Cc: stable@vger.kernel.org
URL: https://tracker.ceph.com/issues/45532
Fixes: 1e9c2eb6 ("ceph: delete stale dentry when last reference is dropped")
Reported-and-Tested-by: default avatarAndrej Filipčič <andrej.filipcic@ijs.si>
Suggested-by: default avatarYan, Zheng <zyan@redhat.com>
Signed-off-by: default avatarJeff Layton <jlayton@kernel.org>
Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
parent 890bd0f8
...@@ -3991,7 +3991,7 @@ void ceph_handle_caps(struct ceph_mds_session *session, ...@@ -3991,7 +3991,7 @@ void ceph_handle_caps(struct ceph_mds_session *session,
__ceph_queue_cap_release(session, cap); __ceph_queue_cap_release(session, cap);
spin_unlock(&session->s_cap_lock); spin_unlock(&session->s_cap_lock);
} }
goto done; goto flush_cap_releases;
} }
/* these will work even if we don't have a cap yet */ /* these will work even if we don't have a cap yet */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment