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. Tested by: jwb Reviewed by: debdrup, emaste PR: 260764 MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D33733
This commit is contained in:
parent
8778e54cab
commit
08a8d16cbb
@ -28,7 +28,7 @@
|
|||||||
.\" @(#)mount_nfs.8 8.3 (Berkeley) 3/29/95
|
.\" @(#)mount_nfs.8 8.3 (Berkeley) 3/29/95
|
||||||
.\" $FreeBSD$
|
.\" $FreeBSD$
|
||||||
.\"
|
.\"
|
||||||
.Dd July 10, 2021
|
.Dd January 11, 2022
|
||||||
.Dt MOUNT_NFS 8
|
.Dt MOUNT_NFS 8
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -129,6 +129,18 @@ trying the mount in the background.
|
|||||||
Useful for
|
Useful for
|
||||||
.Xr fstab 5 ,
|
.Xr fstab 5 ,
|
||||||
where the file system mount is not critical to multiuser operation.
|
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
|
.It Cm deadthresh Ns = Ns Aq Ar value
|
||||||
Set the
|
Set the
|
||||||
.Dq "dead server threshold"
|
.Dq "dead server threshold"
|
||||||
|
@ -103,10 +103,11 @@ struct nfhret {
|
|||||||
long fhsize;
|
long fhsize;
|
||||||
u_char nfh[NFS3_FHSIZE];
|
u_char nfh[NFS3_FHSIZE];
|
||||||
};
|
};
|
||||||
#define BGRND 1
|
#define BGRND 0x01
|
||||||
#define ISBGRND 2
|
#define ISBGRND 0x02
|
||||||
#define OF_NOINET4 4
|
#define OF_NOINET4 0x04
|
||||||
#define OF_NOINET6 8
|
#define OF_NOINET6 0x08
|
||||||
|
#define BGRNDNOW 0x10
|
||||||
static int retrycnt = -1;
|
static int retrycnt = -1;
|
||||||
static int opflags = 0;
|
static int opflags = 0;
|
||||||
static int nfsproto = IPPROTO_TCP;
|
static int nfsproto = IPPROTO_TCP;
|
||||||
@ -242,6 +243,9 @@ main(int argc, char *argv[])
|
|||||||
if (strcmp(opt, "bg") == 0) {
|
if (strcmp(opt, "bg") == 0) {
|
||||||
opflags |= BGRND;
|
opflags |= BGRND;
|
||||||
pass_flag_to_nmount=0;
|
pass_flag_to_nmount=0;
|
||||||
|
} else if (strcmp(opt, "bgnow") == 0) {
|
||||||
|
opflags |= BGRNDNOW;
|
||||||
|
pass_flag_to_nmount=0;
|
||||||
} else if (strcmp(opt, "fg") == 0) {
|
} else if (strcmp(opt, "fg") == 0) {
|
||||||
/* same as not specifying -o bg */
|
/* same as not specifying -o bg */
|
||||||
pass_flag_to_nmount=0;
|
pass_flag_to_nmount=0;
|
||||||
@ -421,6 +425,9 @@ main(int argc, char *argv[])
|
|||||||
argc -= optind;
|
argc -= optind;
|
||||||
argv += optind;
|
argv += optind;
|
||||||
|
|
||||||
|
if ((opflags & (BGRND | BGRNDNOW)) == (BGRND | BGRNDNOW))
|
||||||
|
errx(1, "Options bg and bgnow are mutually exclusive");
|
||||||
|
|
||||||
if (argc != 2) {
|
if (argc != 2) {
|
||||||
usage();
|
usage();
|
||||||
/* NOTREACHED */
|
/* 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;
|
ret = TRYRET_LOCALERR;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user