mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-31 08:15:07 -04:00
nfsd: fix FL_SLEEP being set unconditionally for all LOCK types
The FL_SLEEP guard uses lk_type & (NFS4_READW_LT | NFS4_WRITEW_LT) which computes lk_type & 7, non-zero for all valid lock types including non-blocking ones. This was introduced by commit7e64c5bc49("NLM/NFSD: Fix lock notifications for async-capable filesystems") when refactoring from per-case switch arms. Replace the bitmask test with explicit equality checks. Fixes:7e64c5bc49("NLM/NFSD: Fix lock notifications for async-capable filesystems") Cc: stable@vger.kernel.org Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Jeff Layton <jlayton@kernel.org> Link: https://patch.msgid.link/20260611-nfsd-testing-v2-10-5b90e276f2d9@kernel.org Signed-off-by: Chuck Lever <cel@kernel.org>
This commit is contained in:
@@ -8636,10 +8636,11 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (lock->lk_type & (NFS4_READW_LT | NFS4_WRITEW_LT) &&
|
||||
nfsd4_has_session(cstate) &&
|
||||
locks_can_async_lock(nf->nf_file->f_op))
|
||||
flags |= FL_SLEEP;
|
||||
if ((lock->lk_type == NFS4_READW_LT ||
|
||||
lock->lk_type == NFS4_WRITEW_LT) &&
|
||||
nfsd4_has_session(cstate) &&
|
||||
locks_can_async_lock(nf->nf_file->f_op))
|
||||
flags |= FL_SLEEP;
|
||||
|
||||
nbl = find_or_allocate_block(lock_sop, &fp->fi_fhandle, nn);
|
||||
if (!nbl) {
|
||||
|
||||
Reference in New Issue
Block a user