diff options
author | NeilBrown <neil@brown.name> | 2017-07-04 17:47:40 +1000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2017-07-04 09:47:40 +0200 |
commit | 65e1dee7dcf1668c25c32f0238c935708dbffbcf (patch) | |
tree | 68fe0bf25615de37b83147d3b181b7178ed791ac /src/fstab-generator | |
parent | 45d1ffd51d963604d9f4f501fad46c83c647af1c (diff) | |
download | systemd-65e1dee7dcf1668c25c32f0238c935708dbffbcf.tar.gz |
fstab-generator: handle NFS "bg" mounts correctly. (#6103)
When "bg" is specified for NFS mounts, and if the server is
not accessible, two behaviors are possible depending on networking
details.
If a definitive error is received, such a EHOSTUNREACH or ECONNREFUSED,
mount.nfs will fork and continue in the background, while /bin/mount
will report success.
If no definitive error is reported but the connection times out
instead, then the mount.nfs timeout will normally be longer than the
systemd.mount timeout, so mount.nfs will be killed by systemd.
In the first case the mount has appeared to succeed even though
it hasn't. This can be confusing. Also the background mount.nfs
will never get cleaned up, even if the mount unit is stopped.
In the second case, mount.nfs is killed early and so the mount will
not complete when the server comes back.
Neither of these are ideal.
This patch modifies the options when an NFS bg mount is detected to
force an "fg" mount, but retain the default "retry" time of 10000
minutes that applies to "bg" mounts.
It also imposes "nofail" behaviour and sets the TimeoutSec for the
mount to "infinity" so the retry= time is allowed to complete.
This provides near-identical behaviour to an NFS bg mount started directly
by "mount -a". The only difference is that systemd will not wait for
the first mount attempt, while "mount -a" will.
Fixes #6046
Diffstat (limited to 'src/fstab-generator')
-rw-r--r-- | src/fstab-generator/fstab-generator.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c index 0bbc6c71bc..7688a75f12 100644 --- a/src/fstab-generator/fstab-generator.c +++ b/src/fstab-generator/fstab-generator.c @@ -358,6 +358,20 @@ static int add_mount( "Documentation=man:fstab(5) man:systemd-fstab-generator(8)\n", source); + if (STR_IN_SET(fstype, "nfs", "nfs4") && !automount && + fstab_test_yes_no_option(opts, "bg\0" "fg\0")) { + /* The default retry timeout that mount.nfs uses for 'bg' mounts + * is 10000 minutes, where as it uses 2 minutes for 'fg' mounts. + * As we are making 'bg' mounts look like an 'fg' mount to + * mount.nfs (so systemd can manage the job-control aspects of 'bg'), + * we need to explicitly preserve that default, and also ensure + * the systemd mount-timeout doesn't interfere. + * By placing these options first, they can be over-ridden by + * settings in /etc/fstab. */ + opts = strjoina("x-systemd.mount-timeout=infinity,retry=10000,", opts, ",fg"); + nofail = true; + } + if (!nofail && !automount) fprintf(f, "Before=%s\n", post); |