Since Linux v2.4 it has been possible to stop all NFS server by running
rpc.nfsd 0
i.e. by requesting that zero threads be running. This is preferred as
it doesn't risk killing some other process which happens to be called
"nfsd".
Since Linux v6.6 - and other stable kernels to which
Commit:
390390240145 ("nfsd: don't allow nfsd threads to be
signalled.")
has been backported - sending a signal no longer works to stop nfs server
threads.
This patch changes the nfsserver script to use "rpc.nfsd 0" to stop
server threads.
Signed-off-by: NeilBrown <neil@brown.name>
Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
start-stop-daemon --start --exec "$NFS_NFSD" -- "$@"
echo done
}
-delay_nfsd(){
- for delay in 0 1 2 3 4 5 6 7 8 9
- do
- if pidof nfsd >/dev/null
- then
- echo -n .
- sleep 1
- else
- return 0
- fi
- done
- return 1
-}
stop_nfsd(){
- # WARNING: this kills any process with the executable
- # name 'nfsd'.
echo -n 'stopping nfsd: '
- start-stop-daemon --stop --quiet --signal 1 --name nfsd
- if delay_nfsd || {
- echo failed
- echo ' using signal 9: '
- start-stop-daemon --stop --quiet --signal 9 --name nfsd
- delay_nfsd
- }
+ $NFS_NFSD 0
+ if pidof nfsd
then
- echo done
- else
echo failed
+ else
+ echo done
fi
}