6 # NFS exports file. Some code below keeps a cache of output derived
7 # from exportfs(8). When this file is updated the cache is invalid
8 # and needs to be regenerated.
10 # To change the file, edit the default value below. Do not set
11 # CTDB_NFS_EXPORTS_FILE - it isn't a configuration variable, just a
13 nfs_exports_file="${CTDB_NFS_EXPORTS_FILE:-/var/lib/nfs/etab}"
15 # As above, edit the default value below. CTDB_NFS_DISTRO_STYLE is a
17 nfs_distro_style="${CTDB_NFS_DISTRO_STYLE:-sysvinit-redhat}"
19 case "$nfs_distro_style" in
24 nfs_config="/etc/sysconfig/nfs"
26 case "$nfs_distro_style" in
28 nfs_lock_service="nfslock"
31 nfs_service="nfsserver"
34 nfs_service="nfs-kernel-server"
35 nfs_config="/etc/default/nfs-kernel-server"
48 # Override for unit testing
49 if [ -z "$PROCFS_PATH" ] ; then
53 ##################################################
59 usage: $_c { shutdown | startup }
60 $_c { stop | start } { nfs | nlockmgr }
61 $_c { monitor-list-shares | monitor-post }
67 ##################################################
71 _config="${1:-${nfs_config}}"
73 if [ -r "$_config" ] ; then
78 ##################################################
79 # Basic service stop and start
85 service "$nfs_service" stop
86 if [ -n "$nfs_lock_service" ] ; then
87 service "$nfs_lock_service" stop
91 if [ -n "$nfs_lock_service" ] ; then
92 service "$nfs_lock_service" stop
94 service "$nfs_service" stop
106 if [ -n "$nfs_lock_service" ] ; then
107 service "$nfs_lock_service" start
109 service "$nfs_service" start
112 if [ -n "$nfs_lock_service" ] ; then
113 service "$nfs_lock_service" start
115 service "$nfs_service" start
123 ##################################################
124 # service "stop" and "start" options for restarting
130 echo 0 >"${PROCFS_PATH}/fs/nfsd/threads"
131 basic_stop "nfs" >/dev/null 2>&1 || true
135 basic_stop "nfslock" >/dev/null 2>&1 || true
149 basic_start "nfslock"
156 ##################################################
157 # service init startup and final shutdown
166 basic_stop "nfs" || true
168 _f="${PROCFS_PATH}/sys/net/ipv4/tcp_tw_recycle"
174 ##################################################
175 # monitor-post support
177 nfs_check_thread_count ()
179 # Load NFS configuration to get desired number of threads.
182 # If $RPCNFSDCOUNT/$USE_KERNEL_NFSD_NUMBER isn't set then we could
183 # guess the default from the initscript. However, let's just
184 # assume that those using the default don't care about the number
185 # of threads and that they have switched on this feature in error.
186 _configured_threads="${RPCNFSDCOUNT:-${USE_KERNEL_NFSD_NUMBER}}"
187 [ -n "$_configured_threads" ] || return 0
189 _threads_file="${PROCFS_PATH}/fs/nfsd/threads"
191 # nfsd should be running the configured number of threads. If
192 # there are a different number of threads then tell nfsd the
194 read _running_threads <"$_threads_file" || {
195 echo "WARNING: Reading \"${_threads_file}\" unexpectedly failed"
199 # Intentionally not arithmetic comparison - avoids extra errors
200 # when above read fails in an unexpected way...
201 if [ "$_running_threads" != "$_configured_threads" ] ; then
202 echo "Attempting to correct number of nfsd threads from ${_running_threads} to ${_configured_threads}"
203 echo "$_configured_threads" >"$_threads_file"
207 ##################################################
208 # list share directories
210 nfs_monitor_list_shares ()
212 _cache_file="${CTDB_NFS_CALLOUT_STATE_DIR}/list_shares_cache"
213 # -nt operator is well supported in Linux: dash, bash, ksh, ...
214 # shellcheck disable=SC2039
215 if [ ! -r "$nfs_exports_file" ] || [ ! -r "$_cache_file" ] || \
216 [ "$nfs_exports_file" -nt "$_cache_file" ] ; then
217 mkdir -p "$CTDB_NFS_CALLOUT_STATE_DIR"
218 # We could just use the contents of $nfs_exports_file.
219 # However, let's regard that file as internal to NFS and use
220 # exportfs, which is the public API.
221 if ! _exports=$(exportfs -v) ; then
222 echo "WARNING: failed to run exportfs to list NFS shares" >&2
228 sed -e 's@[[:space:]][[:space:]]*[^[:space:]()][^[:space:]()]*([^[:space:]()][^[:space:]()]*)$@@' |
229 sort -u >"$_cache_file"
235 ##################################################
249 ##################################################
265 nfs_monitor_list_shares
268 nfs_check_thread_count
273 monitor-pre|releaseip|takeip|releaseip-pre|takeip-pre)
274 # Not required/implemented