linux/fs/nfsd
Chuck Lever c1ccfcf1a9 NFSD: Reschedule CB operations when backchannel rpc_clnt is shut down
As part of managing a client disconnect, NFSD closes down and
replaces the backchannel rpc_clnt.

If a callback operation is pending when the backchannel rpc_clnt is
shut down, currently nfsd4_run_cb_work() just discards that
callback. But there are multiple cases to deal with here:

 o The client's lease is getting destroyed. Throw the CB away.

 o The client disconnected. It might be forcing a retransmit of
   CB operations, or it could have disconnected for other reasons.
   Reschedule the CB so it is retransmitted when the client
   reconnects.

Since callback operations can now be rescheduled, ensure that
cb_ops->prepare can be called only once by moving the
cb_ops->prepare paragraph down to just before the rpc_call_async()
call.

Fixes: 2bbfed98a4 ("nfsd: Fix races between nfsd4_cb_release() and nfsd4_shutdown_callback()")
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Reviewed-by: Benjamin Coddington <bcodding@redhat.com>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
2024-03-01 09:12:12 -05:00
..
acl.h NFSD: add posix ACLs to struct nfsd_attrs 2022-08-04 10:28:03 -04:00
auth.c cred: get rid of CONFIG_DEBUG_CREDENTIALS 2023-12-15 14:19:48 -08:00
auth.h
blocklayout.c nfsd: convert to new timestamp accessors 2023-10-18 14:08:24 +02:00
blocklayoutxdr.c NFSD: Make @gdev parameter of ->encode_getdeviceinfo a const pointer 2023-10-16 12:44:29 -04:00
blocklayoutxdr.h NFSD: Make @gdev parameter of ->encode_getdeviceinfo a const pointer 2023-10-16 12:44:29 -04:00
cache.h nfsd: make all of the nfsd stats per-network namespace 2024-03-01 09:12:10 -05:00
current_stateid.h
export.c vfs-6.7.fsid 2023-11-07 12:11:26 -08:00
export.h NFSD: Fix frame size warning in svc_export_parse() 2023-10-16 12:44:39 -04:00
filecache.c nfsd: use __fput_sync() to avoid delayed closing of files. 2024-03-01 09:12:05 -05:00
filecache.h nfsd: Don't leave work of closing files to a work queue 2024-03-01 09:12:05 -05:00
flexfilelayout.c nfsd: move nfserrno() to vfs.c 2022-11-28 12:54:44 -05:00
flexfilelayoutxdr.c NFSD: Make @gdev parameter of ->encode_getdeviceinfo a const pointer 2023-10-16 12:44:29 -04:00
flexfilelayoutxdr.h NFSD: Make @gdev parameter of ->encode_getdeviceinfo a const pointer 2023-10-16 12:44:29 -04:00
idmap.h
Kconfig nfsd: new Kconfig option for legacy client tracking 2024-01-07 17:54:24 -05:00
lockd.c
Makefile NFSD: introduce netlink stubs 2023-10-16 12:44:09 -04:00
netlink.c NFSD: introduce netlink stubs 2023-10-16 12:44:09 -04:00
netlink.h NFSD: introduce netlink stubs 2023-10-16 12:44:09 -04:00
netns.h nfsd: make svc_stat per-network namespace instead of global 2024-03-01 09:12:11 -05:00
nfs2acl.c NFSD 6.3 Release Notes 2023-02-22 14:21:40 -08:00
nfs3acl.c NFSD 6.3 Release Notes 2023-02-22 14:21:40 -08:00
nfs3proc.c NFSD 6.7 Release Notes 2023-10-30 10:12:29 -10:00
nfs3xdr.c NFSD: Ensure that xdr_write_pages updates rq_next_page 2023-06-05 09:01:44 -04:00
nfs4acl.c nfsd: inherit required unset default acls from effective set 2023-08-29 17:45:22 -04:00
nfs4callback.c NFSD: Reschedule CB operations when backchannel rpc_clnt is shut down 2024-03-01 09:12:12 -05:00
nfs4idmap.c SUNRPC: return proper error from get_expiry() 2023-04-26 09:05:00 -04:00
nfs4layouts.c NFSD: Clean up nfsd4_encode_layoutreturn() 2023-10-16 12:44:29 -04:00
nfs4proc.c nfsd: make all of the nfsd stats per-network namespace 2024-03-01 09:12:10 -05:00
nfs4recover.c nfsd: new Kconfig option for legacy client tracking 2024-01-07 17:54:24 -05:00
nfs4state.c nfsd: make all of the nfsd stats per-network namespace 2024-03-01 09:12:10 -05:00
nfs4xdr.c NFSD: fix LISTXATTRS returning more bytes than maxcount 2024-03-01 09:12:07 -05:00
nfscache.c nfsd: make all of the nfsd stats per-network namespace 2024-03-01 09:12:10 -05:00
nfsctl.c nfsd: make svc_stat per-network namespace instead of global 2024-03-01 09:12:11 -05:00
nfsd.h nfsd: remove nfsd_stats, make th_cnt a global counter 2024-03-01 09:12:11 -05:00
nfsfh.c nfsd: make all of the nfsd stats per-network namespace 2024-03-01 09:12:10 -05:00
nfsfh.h NFSD: Add nfsd4_encode_fattr4_change() 2023-10-16 12:44:14 -04:00
nfsproc.c NFSD: Hoist rq_vec preparation into nfsd_read() 2023-06-11 16:37:45 -04:00
nfssvc.c nfsd: make svc_stat per-network namespace instead of global 2024-03-01 09:12:11 -05:00
nfsxdr.c NFSD: Ensure that xdr_write_pages updates rq_next_page 2023-06-05 09:01:44 -04:00
pnfs.h NFSD: Make @gdev parameter of ->encode_getdeviceinfo a const pointer 2023-10-16 12:44:29 -04:00
state.h NFSD: Convert the callback workqueue to use delayed_work 2024-03-01 09:12:12 -05:00
stats.c nfsd: make svc_stat per-network namespace instead of global 2024-03-01 09:12:11 -05:00
stats.h nfsd: make svc_stat per-network namespace instead of global 2024-03-01 09:12:11 -05:00
trace.c
trace.h NFSD: Remove nfsd_drc_gc() tracepoint 2024-01-07 17:54:25 -05:00
vfs.c nfsd: make all of the nfsd stats per-network namespace 2024-03-01 09:12:10 -05:00
vfs.h nfsd: use __fput_sync() to avoid delayed closing of files. 2024-03-01 09:12:05 -05:00
xdr3.h SUNRPC: Change return value type of .pc_encode 2021-10-13 11:34:49 -04:00
xdr4.h NFSD: Modify NFSv4 to use nfsd_read_splice_ok() 2024-01-07 17:54:25 -05:00
xdr4cb.h NFSD: Revert 738401a9bd 2023-12-18 11:22:19 -05:00
xdr.h NFSD: prevent underflow in nfssvc_decode_writeargs() 2022-03-15 09:35:56 -04:00