summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* nfsstats: fix some exit codes.NeilBrown2017-01-111-3/+3
| | | | | | | | | | | "nfsstat -m" always exits with "1" (unless there is an error opening /proc/mounts). It should exist "0". Also, a few usage errors cause an exit of "255" when it should probably be "1". Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* Renamed nfs.config to nfs.confSteve Dickson2017-01-041-0/+0
| | | | Signed-off-by: Steve Dickson <steved@redhat.com>
* exportfs: Make sure pass all valid export flags to nfsdKinglong Mee2017-01-041-5/+7
| | | | | | | | | test_export pass a export flags only marks NFSEXP_FSID, nfsd may want other flags for export checking. This patch make sure exportfs pass all other flags to nfsd. Signed-off-by: Kinglong Mee <kinglongmee@gmail.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* nfs-server-generator: avoid using syslogNeilBrown2017-01-041-0/+3
| | | | | | | | | | | | nfs-server-generator is run very early when a lot of services are not yet started, so it mustn't depend on them. It already avoids using DNS, but it should avoid syslog too. If it tries to log error to syslog, it can deadlock. So just let messages go to stderr. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* mountd: delay reading etab until first request arrives.NeilBrown2017-01-041-2/+0
| | | | | | | | | | | | | | | Reading etab may require hostname lookup, so it is not reliable until the network is active. But we want mountd to start before that so that it is ready when the very first NFS request arrives. So delay reading etab until that request arrives, by which time the network must be online so hopefully hostname look will be reliable. An alternate would be to delay starting mountd and nfsd until the network is on-line, but that will often be an unnecessary delay. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* nfsd: Do not permit manipulation of NFSv4.0, e.g. "-N 4.0"NeilBrown2017-01-042-4/+4
| | | | | | | | | The code maps this into "-4.32", which the kernel rejects. The kernel also rejects "-4.0" (when written to the 'versions' file). So require the minor number to be at least NFS4_MINMINOR, which is '1'. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* nfsd: fix setting of minor version from config fileNeilBrown2017-01-042-5/+17
| | | | | | | | | | | | | | Several problem here: - code didn't actually work, as it cleared a bit from minorversset when it should have cleared from minorvers - code did not allow minor versions to be enabled, which is useful when a new minor version is partially implemented in the kernel but not yet enabled by default - code allowed version 4.0 to be enabled/disabled, which the kernel does not support (as for 4.9 at least). Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* nfs.conf: adding a reference file of /etc/nfs.configSteve Dickson2016-12-201-0/+70
| | | | Signed-off-by: Steve Dickson <steved@redhat.com>
* svcgssd: add /etc/nfs.conf supportNeilBrown2016-12-203-0/+40
| | | | | Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* gssd: add /etc/nfs.conf supportNeilBrown2016-12-203-0/+101
| | | | | Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* exportfs: allow debugging to be enabled in nfs.confNeilBrown2016-12-203-0/+19
| | | | | Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* xlog: Add common support for "debug=??" in /etc/nfs.confNeilBrown2016-12-208-1/+29
| | | | | | | | The value is from the list general, call, auth, parse, all. Most daemons recognise this in their dedicated section. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* conffile: fix striping of quotes from values.NeilBrown2016-12-201-8/+8
| | | | | | | There were being stripped from the name instead! Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* conffile: allow embedded spaces in values.NeilBrown2016-12-201-2/+6
| | | | | | | | | | | | | | | | The code that said "Skip trailing spaces" actually skipped everything after the first space. Change to to only skip trailing spaces, or comments that start after a space. This is useful for lists: Foo: a, b, c The list handling already allows for internal spaces. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* nfsd: add /etc/nfs.conf support for host=NeilBrown2016-12-203-0/+23
| | | | | | | | | A comma separate list of hosts can be given. If any host name is given with "--host" or "-H", then all hosts listed in nfs.conf are ignored. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* nfsd: add /etc/nfs.conf support for nfsd.port option.NeilBrown2016-12-203-2/+10
| | | | | Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* nfsd: remove pointless memory allocations.NeilBrown2016-12-201-9/+4
| | | | | | | | There is not need to e.g. strdup(optarg), and the value is constant. It can just be used directly. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* nfsd: move and improve test on valid portNeilBrown2016-12-201-7/+10
| | | | | | | | | | | | | | | nfssvc_set_sockets() access textual port numbers (by lookup in /etc/services). This uses getaddrinfo which reports errors, except for out-of-range numbers. So change the test on a valid port to only complain if the port given is purely numeric, but is out-of-range. Also move it so that any default value gets tested the same as any argument value. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* Add nfs.systemd man pageNeilBrown2016-12-202-2/+169
| | | | | | | | | This discusses some of the behaviors of the various unit files, and how best to work with them to achieve various results. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* systemd: Remove the nfs-config.serviceNeilBrown2016-12-2012-66/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | Now that we have /etc/nfs.conf, a lot of configuration can be read directly. So nfs-config isn't really needed any more. Some distributions allow command-line arguments for various daemons to be set in an environment file (/etc/sysconfig, /etc/defaults). Passing these through /etc/nfs.conf is not possible. Instead, a distro that needs this functionality can create drop-in files which select the required value. As no commands are given default arguments by systemd unit files, the drop-in can just add distro-specific args. For example /lib/systemd/system/nfs-mountd.service.d/local.conf [Service] EnvironmentFile=/etc/sysconfig/nfs ExecStart= ExecStart=/usr/sbin/rpc.mountd $RPCMOUNTDOPTS Note the need for the empty assignment to remove existing definitions first. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* statd: allow --no-notify to be passed via environment variable.NeilBrown2016-12-203-1/+12
| | | | | | | | | | The significant value of allowing this is that it means that for default operation, systemd unit files do not need to pass any options to any programs. The purpose of this will become apparent in the next patch. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* conffile: allow $name expansion of tag values.NeilBrown2016-12-202-2/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | If the value for a tag starts with '$', then the remainder of the value is treated as an environment variable name. It is looked up in the environment (getenv) and if not found, it is looked for in the [environment] section of the config file. This lookup is formed as access time e.g. by conf_get_str(), not at parse time. The expected usage is that the config file can contain something like [environment] include = /etc/sysconfig/nfs [other-section] tag = $NAME and conf_get_str("other-section","tag") will report the value of "NAME" in the given file. As different distributions used different environment files, and different variable names with-in them, a distro could provide a static config file which maps from names in that environment file to config tags requires by NFS daemons. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* conffile: ignore setting of empty stringNeilBrown2016-12-202-1/+4
| | | | | | | | | | | | A value setting like foo = is now equivalent to not setting "foo" at all. This is likely to be least confusing. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* conffile: strip "quotes" from values in conf file.NeilBrown2016-12-202-9/+18
| | | | | | | | | When "include = " is used to read and "environment" file such as /etc/sysconfig/nfs, there might be quotes around values. Stripe those off, just like a 'shell' reading the file would. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* conffile: add support for include files.NeilBrown2016-12-202-2/+19
| | | | | | | | | | | | | | | | | | A tag include = filename will be replaced by the content of the file. This must appear after a section heading, and any assignments not in their own section will be included in the section that this directive is in. e.g [environment] include = /etc/sysconfig/nfs Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* conffile: split loading of file into a separate function.NeilBrown2016-12-201-21/+26
| | | | | | | This will make support of include files easier. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* conffile: free image of config file after parsingNeilBrown2016-12-201-11/+6
| | | | | | | | | | | | | | | | | | | | | conffile allocates memory and reads in the config file. It then parses the file, using strdup() to take a copy of any string that it uses, so after conf_parse() there are no references in to the allocated file image. conffile does not free this image. It keeps a pointer, but never uses it in an interesing way, and never frees it. This is a little clumsy and interfers with a future patch which will support the inclusion of subordinate config files. So free 'new_conf_addr' when finished with it, and discard the 'conf_addr' variable that stored it. This has an insignificant performance consequence in that we node always free everything in the hash table, even when we know it must be empty. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* Add /etc/nfs.conf support for sm-notifyNeilBrown2016-12-203-0/+48
| | | | | Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* Add /etc/nfs.conf support for statdNeilBrown2016-12-203-2/+78
| | | | | | | Some options appear in the [lockd] section. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* Add /etc/nfs.conf support for mountd.NeilBrown2016-12-203-1/+91
| | | | | | | | Some values are taken from the [nfsd] section to ensure consistency. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* Add /etc/nfs.conf support to rpc.nfsdNeilBrown2016-12-203-3/+106
| | | | | | | | I haven't added -H support, but everything else should be able to be set through /etc/nfs.conf. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* conffile: add bool supportNeilBrown2016-12-203-0/+50
| | | | | | | | conf_get_bool() interprets various strings as 'true' or 'false'. If no suitable value is found, the default is returned. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* Add man-page describing /etc/nfs.confNeilBrown2016-12-202-1/+70
| | | | | | | | | It may seem a little odd placing this in the "systemd" directory, but it is a conveninent place, and /etc/nfs.conf was added in part to help with systemd integration. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* start-statd: script using incompatible file descriptorDaniel Pocock2016-12-201-2/+2
| | | | | | | | | | POSIX.1-2008 only specifies that file descriptor numbers from 0 to 9, inclusive, are supported. The number 200 works in the bash shell, but not in dash. This patch changes the file descriptor number from 200 to 9. Reported in Debian bug #848277 Signed-off-by: Daniel Pocock <daniel@pocock.pro> Signed-off-by: Steve Dickson <steved@redhat.com>
* exportfs: fix path comparison in unexportfs_parsed()Scott Mayhew2016-12-171-0/+2
| | | | | | | | | Passing a path like /export1 to unexportfs_parsed() matches not only /export1, but /export11, /export100, /export1forthemoney, etc. which can result in some nasty surprises when unexporting individual exports. Signed-off-by: Scott Mayhew <smayhew@redhat.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* Fixed typo in usage stringSteve Dickson2016-12-071-1/+1
| | | | Signed-off-by: Steve Dickson <steved@redhat.com>
* Remove error messages on xstrdup failure.NeilBrown2016-12-064-43/+10
| | | | | | | | | | | | xstrdup() prints a messages and exits, except in statd where is prints a message and fails. So there is no point printing an extra message when xstrdup() fails, and except in statd, no point calling exit() as well. So remove some pointless code. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* Remove all use of the nfsctl system call.NeilBrown2016-12-0621-961/+29
| | | | | | | | | | | | | | | | | | | | This systemcall was deprecated early in the 2.6 series as it was replaced by an in-kernel cache which was refilled using an upcall. All communication to kernel is now through the nfsd filesystem. The nfsctl systemcall itself was removed in 3.1. It is unlikely to have been used for over a decade. To remove all uses for the nfsctl systemcall, and call code that only runs when "new_cache" is false. We now assume "new_cache" is always true. This allows the removal of several files as well as assorted functions. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* mount: take history into account when assessing if an error is permanent.NeilBrown2016-12-061-5/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When attempting an NFSv3 mount request, it is possible to catch the server at an "awkward" moment while it is still starting up. In these cases it is possible to get an error that would otherwise indiciate a permanent error, but which should be considered temporary during the start-up window. In particular: ECONNREFUSED will be returned between the time the network interface is configured, and the time that rpcbind starts EOPNOTSUPP (representing RPC_PROGNOTREGISTERED) will be returned between the time that rpcbind starts and the time when nfsd registers, and ESTALE will be returned between the time nfsd starts and when filesystems are exported (this windown can be removed with correct configuration). So these errors only deserve a relatively small timeout. ECONNREFUSED needs a longer timeout than the others as the start-up window is longer. As we have long treated this as a temporary error, with no complaints, we will keep doing so for now. So change nfs_is_permanent_error() to record the previous error and the number of times the same error has been seen. If ESTALE or EOPNOTSUPP is seen 3 times (over 3 seconds or more) or ECONNREFUSED is seen 5 times (15 seconds), report a permanent error, others assume it could be temporary. A result of this is that if you try a UDP mount from a server which doesn't support UDP, you get an error without a few seconds, rather than a 2-minute timeout. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* mount: don't hide temporary error code on timeout.NeilBrown2016-12-061-3/+1
| | | | | | | | | | | | If a mount attempt times out due to repeated non-permanent errors, we always report ETIMEDOUT rather than the actual error. Errors like "ECONNREFUSED" or "EHOSTUNREACH" or "ESTALE" might be more useful than the generic "ETIMEDOUT". So preserve the error code. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* exportfs: remove redundant exports options outputJianhong Yin2016-11-222-9/+6
| | | | | | | | | | | | before this commit, run 'exportfs -s' will output some options more than one time. for example: /path *(rw,no_root_squash,rw,secure,no_root_squash,no_all_squash) the options rw,no_root_squash,etc will be print twice. the reason is secinfo_show() will show these security options again this patch remove these redundant outputs. Signed-off-by: Jianhong Yin <yin-jianhong@163.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* nfsdcltrack: read configuration from a fileNeilBrown2016-11-163-0/+33
| | | | | | | | | | | | | | | | | | | | | | As nfsdcltrack is normally run directly from the kernel there is no opportunity to change the default storage directory. This can be useful in a cluster to locate the "storage directory" on shared storage. The easiest alternative is to allow configuration to be read from a file, particularly as nfs-utils already has code for parsing a config file. So read the config file "/etc/nfs.conf" (or as set by ./configure) and look for "storagedir" and "debug" in the "nfsdcltrack" section. These values can still be over-ridden by command line options. A generic name (nfs.conf) was changes for the config file so that other daemons can be enhanced to read configuration from there. This may be easier than passing command line arguments through systemd. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* Remove all use of /var/lib/nfs/xtabNeilBrown2016-11-157-56/+7
| | | | | | | | | | | | | | | /var/lib/nfs/xtab is only used to find out what has been exported to the kernel. This is more reliably done by reading /proc/fs/nfs{,d}/export and nfs-utils uses that file if is available. So xtab is only need if you have an incredibly ancient kernel which doesn't have /proc/fs/nfs/export (and so which only supports NFSv2) or if /proc is not mounted. Neither of these are credible contexts to run a modern nfs-utils, so stop creating or reading the xtab file. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* nfs-server-generator: avoid using external services.NeilBrown2016-11-074-10/+15
| | | | | | | | | | | | | | | | | | | nfs-server-generator is run very early when a lot of services are not yet started, so it mustn't depend on them. Currently it can try to use hostname lookup and syslog. Using hostname lookup can cause errors and when these are logged via syslog, it can cause the generator to block indefinitely Hostname-lookup is not needed, as we don't use the host issue, and sending message to stderr is sufficient for the generator. Disabling syslog is easy - call a function that sets a static variable. Disabling hostname lookup requires adding an "ignore_hosts" flags to export_read and export_d_read(). Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* mountstats: add pNFS READs and WRITEsScott Mayhew2016-09-221-0/+2
| | | | | | | | | These counters are already in /proc/self/mountstats but the mountstats program doesn't display them. Signed-off-by: Scott Mayhew <smayhew@redhat.com> Signed-off-by: Steve Dickson <steved@redhat.com> Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1377740
* rpc-gssd: Make the path to the keytab configurable.Steve Dickson2016-08-253-1/+8
| | | | | | | | Kerberos keytabs don't always live in the '/etc' directory. Allow --sysconfdir flag to define where the keytab directory is in rpc-gssd.service Signed-off-by: Steve Dickson <steved@redhat.com>
* Make location of nfs-utils_env.sh configurable.Steve Dickson2016-08-243-1/+8
| | | | | | | | | | A recent patch moved this file to /usr/libexec/... That directory isn't universal, and doesn't exist on openSUSE or Debian for example. So change it to use the $libexecdir directory determined by configure Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* nfs-server-generator: Fix segfault when /etc/fstab does not existYu Watanabe2016-08-241-1/+7
| | | | | | | Added a couple checks to handle failures correctly Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1369714 Signed-off-by: Steve Dickson <steved@redhat.com>
* mount: RPC_PROGNOTREGISTERED should not be a permanent errorNeilBrown2016-08-221-4/+3
| | | | | | | | | | | | | | | | | | | | | | Commit: bf66c9facb8e ("mounts.nfs: v2 and v3 background mounts should retry when server is down.") changed the behaviour of "bg" mounts so that RPC_PROGNOTREGISTERED, which maps to EOPNOTSUPP, is not a permanent error. This useful because when an NFS server starts up there is a small window between the moment that rpcbind (or portmap) starts responding to lookup requests, and the moment when nfsd registers with rpcbind. During that window rpcbind will reply with RPC_PROGNOTREGISTERED, but mount should not give up. This same reasoning applies to foreground mounts. They don't wait for as long, but could still hit the window and fail prematurely. So revert the above patch and instead add EOPNOTSUPP to the list of temporary errors known to nfs_is_permanent_error. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* systemd: improve ordering between nfs-server and various mountsSteve Dickson2016-08-224-3/+153
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Commit: 1e41488f428c ("systemd: Order NFS server before client") added an ordering dependency between network mounts and nfs-server. This is good for loop-back NFS mounts as it ensures the server will remain until after the mountpoint is unmounted. However is is bad for _net mounts (such as those via iSCSI) which are being NFS exported. nfs-server needs to be start *after* exported filesystems are mounted, and *before* NFS filesystems are mounted. systemd isn't able to make this distinction natively, so we need to help it. This patch adds a systemd generator which creates a drop-in for nfs-server.services so that it is started "Before" any "nfs" or "nfs4" mount, and so that it has a "RequiresMountsFor" dependency on any exported filesystem. This creates the required ordering. Note that if you try to export an "nfs" mount, systemd will detect an ordering loop and will refused to start the nfs server. This is probably the correct thing to do. This patch also removes the ordering dependency with remote-fs-pre.target which the above-mentioned commit added. It is no longer needed. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Steve Dickson <steved@redhat.com>