| Administrative interfaces for nfsd |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| Note that normally these interfaces are used only by the utilities in |
| nfs-utils. |
| |
| nfsd is controlled mainly by pseudofiles under the "nfsd" filesystem, |
| which is normally mounted at /proc/fs/nfsd/. |
| |
| The server is always started by the first write of a nonzero value to |
| nfsd/threads. |
| |
| Before doing that, NFSD can be told which sockets to listen on by |
| writing to nfsd/portlist; that write may be: |
| |
| - an ascii-encoded file descriptor, which should refer to a |
| bound (and listening, for tcp) socket, or |
| - "transportname port", where transportname is currently either |
| "udp", "tcp", or "rdma". |
| |
| If nfsd is started without doing any of these, then it will create one |
| udp and one tcp listener at port 2049 (see nfsd_init_socks). |
| |
| On startup, nfsd and lockd grace periods start. |
| |
| nfsd is shut down by a write of 0 to nfsd/threads. All locks and state |
| are thrown away at that point. |
| |
| Between startup and shutdown, the number of threads may be adjusted up |
| or down by additional writes to nfsd/threads or by writes to |
| nfsd/pool_threads. |
| |
| For more detail about files under nfsd/ and what they control, see |
| fs/nfsd/nfsctl.c; most of them have detailed comments. |
| |
| Implementation notes |
| ^^^^^^^^^^^^^^^^^^^^ |
| |
| Note that the rpc server requires the caller to serialize addition and |
| removal of listening sockets, and startup and shutdown of the server. |
| For nfsd this is done using nfsd_mutex. |