linux/fs/nfsd
Trond Myklebust e6abc8caa6 nfsd: Don't release the callback slot unless it was actually held
If there are multiple callbacks queued, waiting for the callback
slot when the callback gets shut down, then they all currently
end up acting as if they hold the slot, and call
nfsd4_cb_sequence_done() resulting in interesting side-effects.

In addition, the 'retry_nowait' path in nfsd4_cb_sequence_done()
causes a loop back to nfsd4_cb_prepare() without first freeing the
slot, which causes a deadlock when nfsd41_cb_get_slot() gets called
a second time.

This patch therefore adds a boolean to track whether or not the
callback did pick up the slot, so that it can do the right thing
in these 2 cases.

Cc: stable@vger.kernel.org
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
2019-04-08 12:43:15 -04:00
..
acl.h nfsd4: remove nfs4_acl_new 2014-07-08 17:14:27 -04:00
auth.c nfsd: auth: Fix gid sorting when rootsquash enabled 2018-01-22 20:13:07 -08:00
auth.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
blocklayout.c vfs/y2038: inode timestamps conversion to timespec64 2018-06-15 07:31:07 +09:00
blocklayoutxdr.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
blocklayoutxdr.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
cache.h knfsd: Improve lookup performance in the duplicate reply cache using an rbtree 2018-10-29 16:58:04 -04:00
current_stateid.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
export.c knfsd: Allow lockless lookups of the exports 2018-10-29 16:58:04 -04:00
export.h knfsd: Allow lockless lookups of the exports 2018-10-29 16:58:04 -04:00
fault_inject.c Lots of good bugfixes, including: 2017-11-18 11:22:04 -08:00
flexfilelayout.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
flexfilelayoutxdr.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
flexfilelayoutxdr.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
idmap.h nfsd: Remove duplicate define of IDMAP_NAMESZ/IDMAP_TYPE_xx 2015-07-20 14:58:46 -04:00
Kconfig block: make scsi_request and scsi ioctl support optional 2017-01-31 10:53:05 -07:00
lockd.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
netns.h NFSD introduce async copy feature 2018-09-25 20:34:54 -04:00
nfs2acl.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
nfs3acl.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
nfs3proc.c nfsd/nfsd3_proc_readdir: fix buffer count and page pointers 2019-04-05 19:57:24 -04:00
nfs3xdr.c nfsd/nfsd3_proc_readdir: fix buffer count and page pointers 2019-04-05 19:57:24 -04:00
nfs4acl.c nfsd: check permissions when setting ACLs 2016-06-24 12:11:52 -04:00
nfs4callback.c nfsd: Don't release the callback slot unless it was actually held 2019-04-08 12:43:15 -04:00
nfs4idmap.c knfsd: Lockless lookup of NFSv4 identities. 2018-10-29 16:58:04 -04:00
nfs4layouts.c nfsd: drop useless LIST_HEAD 2018-12-27 20:59:50 -05:00
nfs4proc.c NFSD remove OP_CACHEME from 4.2 op_flags 2018-12-14 12:52:15 -05:00
nfs4recover.c nfsd: fix a warning in __cld_pipe_upcall() 2018-11-28 18:36:03 -05:00
nfs4state.c nfsd: fix performance-limiting session calculation 2019-02-21 10:47:00 -05:00
nfs4xdr.c NFSD introduce async copy feature 2018-09-25 20:34:54 -04:00
nfscache.c mm: convert totalram_pages and totalhigh_pages variables to atomic 2018-12-28 12:11:47 -08:00
nfsctl.c Miscellaneous NFS server fixes. Probably the most visible bug is one 2019-03-12 15:06:54 -07:00
nfsd.h nfsd4: support change_attr_type attribute 2018-06-17 10:41:31 -04:00
nfsfh.c nfsd: use true and false for boolean values 2018-08-09 16:11:21 -04:00
nfsfh.h This request is late, apologies. 2018-02-08 15:18:32 -08:00
nfsproc.c NFSD: Handle full-length symlinks 2018-08-09 16:11:21 -04:00
nfssvc.c race of nfsd inetaddr notifiers vs nn->nfsd_serv change 2017-11-27 16:45:11 -05:00
nfsxdr.c vfs: change inode times to use struct timespec64 2018-06-05 16:57:31 -07:00
pnfs.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
state.h nfsd: Don't release the callback slot unless it was actually held 2019-04-08 12:43:15 -04:00
stats.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
stats.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
trace.c nfsd: move include of state.h from trace.c to trace.h 2015-10-23 15:57:29 -04:00
trace.h nfsd: Trace NFSv4 COMPOUND execution 2018-04-03 15:08:15 -04:00
vfs.c nfsd: Fix error return values for nfsd4_clone_file_range() 2019-02-06 15:32:05 -05:00
vfs.h nfsd: Add I/O trace points in the NFSv4 read proc 2018-04-03 15:08:15 -04:00
xdr3.h NFSD: Clean up legacy NFS SYMLINK argument XDR decoders 2018-04-03 15:08:16 -04:00
xdr4.h NFSD introduce async copy feature 2018-09-25 20:34:54 -04:00
xdr4cb.h NFSD CB_OFFLOAD xdr 2018-09-25 20:34:54 -04:00
xdr.h NFSD: Clean up legacy NFS SYMLINK argument XDR decoders 2018-04-03 15:08:16 -04:00