mount_nfs: Warn that intr, soft are not safe for NFSv4
If the "intr" and/or "soft" mount options are used for NFSv4 mounts, the protocol can be broken when the operation returns without waiting for the RPC reply. The likelyhood of failure increases for NFSv4.1/4.2 mounts, since the session slot will be broken when an RPC reply is not processed. This is mentioned in the BUGS section of "man mount_nfs", but more needs to be done. This patch adds code that generates a warning message when the mount is done. PR: 260011 Reviewed by: emaste MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D35407
This commit is contained in:
parent
ea5b2d6242
commit
c0d14b0220
@ -73,6 +73,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <netdb.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@ -160,7 +161,9 @@ main(int argc, char *argv[])
|
||||
char mntpath[MAXPATHLEN], errmsg[255];
|
||||
char hostname[MAXHOSTNAMELEN + 1], gssn[MAXHOSTNAMELEN + 50];
|
||||
const char *gssname, *nmount_errstr;
|
||||
bool softintr;
|
||||
|
||||
softintr = false;
|
||||
iov = NULL;
|
||||
iovlen = 0;
|
||||
memset(errmsg, 0, sizeof(errmsg));
|
||||
@ -210,6 +213,7 @@ main(int argc, char *argv[])
|
||||
case 'i':
|
||||
printf("-i deprecated, use -o intr\n");
|
||||
build_iovec(&iov, &iovlen, "intr", NULL, 0);
|
||||
softintr = true;
|
||||
break;
|
||||
case 'L':
|
||||
printf("-L deprecated, use -o nolockd\n");
|
||||
@ -366,6 +370,10 @@ main(int argc, char *argv[])
|
||||
"value -- %s", val);
|
||||
}
|
||||
pass_flag_to_nmount=0;
|
||||
} else if (strcmp(opt, "soft") == 0) {
|
||||
softintr = true;
|
||||
} else if (strcmp(opt, "intr") == 0) {
|
||||
softintr = true;
|
||||
}
|
||||
if (pass_flag_to_nmount) {
|
||||
build_iovec(&iov, &iovlen, opt,
|
||||
@ -395,6 +403,7 @@ main(int argc, char *argv[])
|
||||
case 's':
|
||||
printf("-s deprecated, use -o soft\n");
|
||||
build_iovec(&iov, &iovlen, "soft", NULL, 0);
|
||||
softintr = true;
|
||||
break;
|
||||
case 'T':
|
||||
nfsproto = IPPROTO_TCP;
|
||||
@ -433,6 +442,11 @@ main(int argc, char *argv[])
|
||||
/* NOTREACHED */
|
||||
}
|
||||
|
||||
/* Warn that NFSv4 mounts only work correctly as hard mounts. */
|
||||
if (mountmode == V4 && softintr)
|
||||
warnx("Warning, options soft and/or intr cannot be safely used"
|
||||
" for NFSv4. See the BUGS section of mount_nfs(8)");
|
||||
|
||||
spec = *argv++;
|
||||
mntname = *argv;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user