diff options
author | Yixun Lan <dlan@gentoo.org> | 2021-12-22 21:15:58 +0800 |
---|---|---|
committer | Yixun Lan <dlan@gentoo.org> | 2021-12-22 21:17:52 +0800 |
commit | f7586f437afc004fee03a1fdf586d6dd9b7db480 (patch) | |
tree | 648706a00fdccb4d73643110db6b6731cb6aeac4 /net-fs/autofs | |
parent | www-apps/owncloud: 10.9.0 bump (diff) | |
download | gentoo-f7586f437afc004fee03a1fdf586d6dd9b7db480.tar.gz gentoo-f7586f437afc004fee03a1fdf586d6dd9b7db480.tar.bz2 gentoo-f7586f437afc004fee03a1fdf586d6dd9b7db480.zip |
net-fs/autofs: fix nfsv4 mount issue
Closes: https://bugs.gentoo.org/827239
Package-Manager: Portage-3.0.28, Repoman-3.0.3
Signed-off-by: Yixun Lan <dlan@gentoo.org>
Diffstat (limited to 'net-fs/autofs')
-rw-r--r-- | net-fs/autofs/autofs-5.1.8-r1.ebuild (renamed from net-fs/autofs/autofs-5.1.8.ebuild) | 1 | ||||
-rw-r--r-- | net-fs/autofs/files/autofs-5.1.8-nfsv4-mount.patch | 88 |
2 files changed, 89 insertions, 0 deletions
diff --git a/net-fs/autofs/autofs-5.1.8.ebuild b/net-fs/autofs/autofs-5.1.8-r1.ebuild index 3c519f852c70..d8aa892b214a 100644 --- a/net-fs/autofs/autofs-5.1.8.ebuild +++ b/net-fs/autofs/autofs-5.1.8-r1.ebuild @@ -45,6 +45,7 @@ PATCHES=( "${FILESDIR}/${PN}-5.1.6-pid.patch" "${FILESDIR}/${PN}-5.1.6-pid.patch" "${FILESDIR}/${P}-dmalloc.patch" + "${FILESDIR}/${P}-nfsv4-mount.patch" ) pkg_setup() { diff --git a/net-fs/autofs/files/autofs-5.1.8-nfsv4-mount.patch b/net-fs/autofs/files/autofs-5.1.8-nfsv4-mount.patch new file mode 100644 index 000000000000..eb1bc6cb4241 --- /dev/null +++ b/net-fs/autofs/files/autofs-5.1.8-nfsv4-mount.patch @@ -0,0 +1,88 @@ +autofs-5.1.8 - fix nfsv4 only mounts should not use rpcbind + +From: Ian Kent <raven@xxxxxxxxxx> + +Commit 606795ecfaa1 ("autofs-5.1.7 - also require TCP_REQUESTED when +setting NFS port" together with commit 26fb6b5408be) caused NFSv4 only +mounts to also use rpcbind to probe availability which breaks the +requirememt that this type of mount not use rpcbind at all. + +Fix this by treating fstype=nfs4 mounts as a special case which doesn't +use rpcbind. +--- + CHANGELOG | 1 + + include/replicated.h | 2 ++ + modules/mount_nfs.c | 13 +++++++------ + modules/replicated.c | 4 ++-- + 4 files changed, 12 insertions(+), 8 deletions(-) + +diff --git a/include/replicated.h b/include/replicated.h +index 95ff1f0d..f889a56a 100644 +--- a/include/replicated.h ++++ b/include/replicated.h +@@ -35,6 +35,8 @@ + #define NFS3_REQUESTED NFS3_SUPPORTED + #define NFS4_REQUESTED NFS4_SUPPORTED + ++#define NFS4_ONLY_REQUESTED 0x0800 ++ + #define TCP_SUPPORTED 0x0001 + #define UDP_SUPPORTED 0x0002 + #define TCP_REQUESTED TCP_SUPPORTED +diff --git a/modules/mount_nfs.c b/modules/mount_nfs.c +index 0ab87dcf..feb5afcd 100644 +--- a/modules/mount_nfs.c ++++ b/modules/mount_nfs.c +@@ -92,7 +92,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int + mount_default_proto = defaults_get_mount_nfs_default_proto(); + vers = NFS_VERS_DEFAULT | NFS_PROTO_DEFAULT; + if (strcmp(fstype, "nfs4") == 0) +- vers = NFS4_VERS_DEFAULT | TCP_SUPPORTED; ++ vers = NFS4_VERS_DEFAULT | TCP_SUPPORTED | NFS4_ONLY_REQUESTED; + else if (mount_default_proto == 4) + vers = vers | NFS4_VERS_DEFAULT; + +@@ -157,15 +157,16 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int + } else { + /* Is any version of NFSv4 in the options */ + if (_strncmp("vers=4", cp, 6) == 0 || +- _strncmp("nfsvers=4", cp, 9) == 0) +- vers = NFS4_VERS_MASK | TCP_SUPPORTED; +- else if (_strncmp("vers=3", cp, o_len) == 0 || ++ _strncmp("nfsvers=4", cp, 9) == 0) { ++ vers &= ~(NFS_VERS_MASK); ++ vers |= NFS4_VERS_MASK | TCP_SUPPORTED | NFS4_ONLY_REQUESTED; ++ } else if (_strncmp("vers=3", cp, o_len) == 0 || + _strncmp("nfsvers=3", cp, o_len) == 0) { +- vers &= ~(NFS4_VERS_MASK | NFS_VERS_MASK); ++ vers &= ~(NFS4_VERS_MASK | NFS_VERS_MASK | NFS4_ONLY_REQUESTED); + vers |= NFS3_REQUESTED; + } else if (_strncmp("vers=2", cp, o_len) == 0 || + _strncmp("nfsvers=2", cp, o_len) == 0) { +- vers &= ~(NFS4_VERS_MASK | NFS_VERS_MASK); ++ vers &= ~(NFS4_VERS_MASK | NFS_VERS_MASK | NFS4_ONLY_REQUESTED); + vers |= NFS2_REQUESTED; + } else if (strstr(cp, "port=") == cp && + o_len - 5 < 25) { +diff --git a/modules/replicated.c b/modules/replicated.c +index 09075dd0..cdb7c617 100644 +--- a/modules/replicated.c ++++ b/modules/replicated.c +@@ -291,7 +291,7 @@ static unsigned int get_nfs_info(unsigned logopt, struct host *host, + + rpc_info->proto = proto; + if (port < 0) { +- if ((version & NFS4_REQUESTED) && (version & TCP_REQUESTED)) ++ if (version & NFS4_REQUESTED && (version & NFS4_ONLY_REQUESTED)) + rpc_info->port = NFS_PORT; + else + port = 0; +@@ -525,7 +525,7 @@ static int get_vers_and_cost(unsigned logopt, struct host *host, + { + struct conn_info pm_info, rpc_info; + time_t timeout = RPC_TIMEOUT; +- unsigned int supported, vers = (NFS_VERS_MASK | NFS4_VERS_MASK); ++ unsigned int supported, vers = (NFS_VERS_MASK | NFS4_VERS_MASK | NFS4_ONLY_REQUESTED); + int ret = 0; + + if (!check_address_proto(logopt, host, version)) |