ceph: don't take refs to want mask unless we have all bits

If we don't have all of the cap bits for the want mask in
try_get_cap_refs, then just take refs on the need bits.

Signed-off-by: "Yan, Zheng" <ukernel@gmail.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
Yan, Zheng 2020-02-18 08:17:08 -05:00 committed by Ilya Dryomov
parent a25949b990
commit 173e70e8ac

View File

@ -2666,7 +2666,10 @@ again:
}
snap_rwsem_locked = true;
}
*got = need | (have & want);
if ((have & want) == want)
*got = need | want;
else
*got = need;
if (S_ISREG(inode->i_mode) &&
(need & CEPH_CAP_FILE_RD) &&
!(*got & CEPH_CAP_FILE_CACHE))