mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 12:43:29 +02:00
ceph: don't let check_caps skip sending responses for revoke msgs
If a client sends out a cap update dropping caps with the prior 'seq' just before an incoming cap revoke request, then the client may drop the revoke because it believes it's already released the requested capabilities. This causes the MDS to wait indefinitely for the client to respond to the revoke. It's therefore always a good idea to ack the cap revoke request with the bumped up 'seq'. Cc: stable@vger.kernel.org Link: https://tracker.ceph.com/issues/61782 Signed-off-by: Xiubo Li <xiubli@redhat.com> Reviewed-by: Milind Changire <mchangir@redhat.com> Reviewed-by: Patrick Donnelly <pdonnell@redhat.com> Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
@@ -3566,6 +3566,15 @@ static void handle_cap_grant(struct inode *inode,
|
|||||||
}
|
}
|
||||||
BUG_ON(cap->issued & ~cap->implemented);
|
BUG_ON(cap->issued & ~cap->implemented);
|
||||||
|
|
||||||
|
/* don't let check_caps skip sending a response to MDS for revoke msgs */
|
||||||
|
if (le32_to_cpu(grant->op) == CEPH_CAP_OP_REVOKE) {
|
||||||
|
cap->mds_wanted = 0;
|
||||||
|
if (cap == ci->i_auth_cap)
|
||||||
|
check_caps = 1; /* check auth cap only */
|
||||||
|
else
|
||||||
|
check_caps = 2; /* check all caps */
|
||||||
|
}
|
||||||
|
|
||||||
if (extra_info->inline_version > 0 &&
|
if (extra_info->inline_version > 0 &&
|
||||||
extra_info->inline_version >= ci->i_inline_version) {
|
extra_info->inline_version >= ci->i_inline_version) {
|
||||||
ci->i_inline_version = extra_info->inline_version;
|
ci->i_inline_version = extra_info->inline_version;
|
||||||
|
Reference in New Issue
Block a user