mount_nfs: Add a "bgnow" NFS mount option
The "bg" option does not go background until the initial mount
attempt fails, which can take 60+ seconds.
This new "bgnow" option goes background immediately, avoiding
the 60+ second delay, if the NFS server is not yet available.
The man page update is a content change.
PR: 260764
(cherry picked from commit 08a8d16cbb
)
This commit is contained in:
parent
3953a0d780
commit
82dbca47a5
@ -28,7 +28,7 @@
|
||||
.\" @(#)mount_nfs.8 8.3 (Berkeley) 3/29/95
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd July 10, 2021
|
||||
.Dd January 11, 2022
|
||||
.Dt MOUNT_NFS 8
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -129,6 +129,18 @@ trying the mount in the background.
|
||||
Useful for
|
||||
.Xr fstab 5 ,
|
||||
where the file system mount is not critical to multiuser operation.
|
||||
.It Cm bgnow
|
||||
Like
|
||||
.Cm bg ,
|
||||
fork off a child to keep trying the mount in the background,
|
||||
but do not attempt to mount in the foreground first.
|
||||
This eliminates a
|
||||
60+ second timeout when the server is not responding.
|
||||
Useful for speeding up the boot process of a client when the server is
|
||||
likely to be unavailable.
|
||||
This is often the case for interdependent servers
|
||||
such as cross-mounted servers (each of two servers is an NFS client of
|
||||
the other) and for cluster nodes that must boot before the file servers.
|
||||
.It Cm deadthresh Ns = Ns Aq Ar value
|
||||
Set the
|
||||
.Dq "dead server threshold"
|
||||
|
@ -103,10 +103,11 @@ struct nfhret {
|
||||
long fhsize;
|
||||
u_char nfh[NFS3_FHSIZE];
|
||||
};
|
||||
#define BGRND 1
|
||||
#define ISBGRND 2
|
||||
#define OF_NOINET4 4
|
||||
#define OF_NOINET6 8
|
||||
#define BGRND 0x01
|
||||
#define ISBGRND 0x02
|
||||
#define OF_NOINET4 0x04
|
||||
#define OF_NOINET6 0x08
|
||||
#define BGRNDNOW 0x10
|
||||
static int retrycnt = -1;
|
||||
static int opflags = 0;
|
||||
static int nfsproto = IPPROTO_TCP;
|
||||
@ -242,6 +243,9 @@ main(int argc, char *argv[])
|
||||
if (strcmp(opt, "bg") == 0) {
|
||||
opflags |= BGRND;
|
||||
pass_flag_to_nmount=0;
|
||||
} else if (strcmp(opt, "bgnow") == 0) {
|
||||
opflags |= BGRNDNOW;
|
||||
pass_flag_to_nmount=0;
|
||||
} else if (strcmp(opt, "fg") == 0) {
|
||||
/* same as not specifying -o bg */
|
||||
pass_flag_to_nmount=0;
|
||||
@ -421,6 +425,9 @@ main(int argc, char *argv[])
|
||||
argc -= optind;
|
||||
argv += optind;
|
||||
|
||||
if ((opflags & (BGRND | BGRNDNOW)) == (BGRND | BGRNDNOW))
|
||||
errx(1, "Options bg and bgnow are mutually exclusive");
|
||||
|
||||
if (argc != 2) {
|
||||
usage();
|
||||
/* NOTREACHED */
|
||||
@ -649,6 +656,14 @@ getnfsargs(char *spec, struct iovec **iov, int *iovlen)
|
||||
}
|
||||
}
|
||||
|
||||
if ((opflags & (BGRNDNOW | ISBGRND)) == BGRNDNOW) {
|
||||
warnx("Mount %s:%s, backgrounding",
|
||||
hostp, spec);
|
||||
opflags |= ISBGRND;
|
||||
if (daemon(0, 0) != 0)
|
||||
err(1, "daemon");
|
||||
}
|
||||
|
||||
ret = TRYRET_LOCALERR;
|
||||
for (;;) {
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user