diff options
author | Chuck Lever <chuck.lever@oracle.com> | 2023-01-07 10:15:35 -0500 |
---|---|---|
committer | Chuck Lever <chuck.lever@oracle.com> | 2023-01-07 10:16:33 -0500 |
commit | 5304930dbae82d259bcf7e5611db7c81e7a42eff (patch) | |
tree | 1890929f17c68ee5e91c9513818762452205ea37 | |
parent | 7827c81f0248e3c2f40d438b020f3d222f002171 (diff) | |
download | linux-stable-5304930dbae82d259bcf7e5611db7c81e7a42eff.tar.gz linux-stable-5304930dbae82d259bcf7e5611db7c81e7a42eff.tar.bz2 linux-stable-5304930dbae82d259bcf7e5611db7c81e7a42eff.zip |
NFSD: Use set_bit(RQ_DROPME)
The premise that "Once an svc thread is scheduled and executing an
RPC, no other processes will touch svc_rqst::rq_flags" is false.
svc_xprt_enqueue() examines the RQ_BUSY flag in scheduled nfsd
threads when determining which thread to wake up next.
Fixes: 9315564747cb ("NFSD: Use only RQ_DROPME to signal the need to drop a reply")
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
-rw-r--r-- | fs/nfsd/nfsproc.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/nfsd/nfsproc.c b/fs/nfsd/nfsproc.c index a5570cf75f3f..9744443c3965 100644 --- a/fs/nfsd/nfsproc.c +++ b/fs/nfsd/nfsproc.c @@ -211,7 +211,7 @@ nfsd_proc_read(struct svc_rqst *rqstp) if (resp->status == nfs_ok) resp->status = fh_getattr(&resp->fh, &resp->stat); else if (resp->status == nfserr_jukebox) - __set_bit(RQ_DROPME, &rqstp->rq_flags); + set_bit(RQ_DROPME, &rqstp->rq_flags); return rpc_success; } @@ -246,7 +246,7 @@ nfsd_proc_write(struct svc_rqst *rqstp) if (resp->status == nfs_ok) resp->status = fh_getattr(&resp->fh, &resp->stat); else if (resp->status == nfserr_jukebox) - __set_bit(RQ_DROPME, &rqstp->rq_flags); + set_bit(RQ_DROPME, &rqstp->rq_flags); return rpc_success; } |