mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
![]() If an svc thread needs to perform some initialisation that might fail, it has no good way to handle the failure. Before the thread can exit it must call svc_exit_thread(), but that requires the service mutex to be held. The thread cannot simply take the mutex as that could deadlock if there is a concurrent attempt to shut down all threads (which is unlikely, but not impossible). nfsd currently call svc_exit_thread() unprotected in the unlikely event that unshare_fs_struct() fails. We can clean this up by introducing svc_thread_init_status() by which an svc thread can report whether initialisation has succeeded. If it has, it continues normally into the action loop. If it has not, svc_thread_init_status() immediately aborts the thread. svc_start_kthread() waits for either of these to happen, and calls svc_exit_thread() (under the mutex) if the thread aborted. Signed-off-by: NeilBrown <neilb@suse.de> Reviewed-by: Jeff Layton <jlayton@kernel.org> Signed-off-by: Chuck Lever <chuck.lever@oracle.com> |
||
---|---|---|
.. | ||
clnt4xdr.c | ||
clntlock.c | ||
clntproc.c | ||
clntxdr.c | ||
host.c | ||
Makefile | ||
mon.c | ||
netns.h | ||
procfs.c | ||
procfs.h | ||
svc4proc.c | ||
svc.c | ||
svclock.c | ||
svcproc.c | ||
svcshare.c | ||
svcsubs.c | ||
svcxdr.h | ||
trace.c | ||
trace.h | ||
xdr4.c | ||
xdr.c |