1 |
commit: f7586f437afc004fee03a1fdf586d6dd9b7db480 |
2 |
Author: Yixun Lan <dlan <AT> gentoo <DOT> org> |
3 |
AuthorDate: Wed Dec 22 13:15:58 2021 +0000 |
4 |
Commit: Yixun Lan <dlan <AT> gentoo <DOT> org> |
5 |
CommitDate: Wed Dec 22 13:17:52 2021 +0000 |
6 |
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=f7586f43 |
7 |
|
8 |
net-fs/autofs: fix nfsv4 mount issue |
9 |
|
10 |
Closes: https://bugs.gentoo.org/827239 |
11 |
Package-Manager: Portage-3.0.28, Repoman-3.0.3 |
12 |
Signed-off-by: Yixun Lan <dlan <AT> gentoo.org> |
13 |
|
14 |
...{autofs-5.1.8.ebuild => autofs-5.1.8-r1.ebuild} | 1 + |
15 |
net-fs/autofs/files/autofs-5.1.8-nfsv4-mount.patch | 88 ++++++++++++++++++++++ |
16 |
2 files changed, 89 insertions(+) |
17 |
|
18 |
diff --git a/net-fs/autofs/autofs-5.1.8.ebuild b/net-fs/autofs/autofs-5.1.8-r1.ebuild |
19 |
similarity index 98% |
20 |
rename from net-fs/autofs/autofs-5.1.8.ebuild |
21 |
rename to net-fs/autofs/autofs-5.1.8-r1.ebuild |
22 |
index 3c519f852c70..d8aa892b214a 100644 |
23 |
--- a/net-fs/autofs/autofs-5.1.8.ebuild |
24 |
+++ b/net-fs/autofs/autofs-5.1.8-r1.ebuild |
25 |
@@ -45,6 +45,7 @@ PATCHES=( |
26 |
"${FILESDIR}/${PN}-5.1.6-pid.patch" |
27 |
"${FILESDIR}/${PN}-5.1.6-pid.patch" |
28 |
"${FILESDIR}/${P}-dmalloc.patch" |
29 |
+ "${FILESDIR}/${P}-nfsv4-mount.patch" |
30 |
) |
31 |
|
32 |
pkg_setup() { |
33 |
|
34 |
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 |
35 |
new file mode 100644 |
36 |
index 000000000000..eb1bc6cb4241 |
37 |
--- /dev/null |
38 |
+++ b/net-fs/autofs/files/autofs-5.1.8-nfsv4-mount.patch |
39 |
@@ -0,0 +1,88 @@ |
40 |
+autofs-5.1.8 - fix nfsv4 only mounts should not use rpcbind |
41 |
+ |
42 |
+From: Ian Kent <raven@xxxxxxxxxx> |
43 |
+ |
44 |
+Commit 606795ecfaa1 ("autofs-5.1.7 - also require TCP_REQUESTED when |
45 |
+setting NFS port" together with commit 26fb6b5408be) caused NFSv4 only |
46 |
+mounts to also use rpcbind to probe availability which breaks the |
47 |
+requirememt that this type of mount not use rpcbind at all. |
48 |
+ |
49 |
+Fix this by treating fstype=nfs4 mounts as a special case which doesn't |
50 |
+use rpcbind. |
51 |
+--- |
52 |
+ CHANGELOG | 1 + |
53 |
+ include/replicated.h | 2 ++ |
54 |
+ modules/mount_nfs.c | 13 +++++++------ |
55 |
+ modules/replicated.c | 4 ++-- |
56 |
+ 4 files changed, 12 insertions(+), 8 deletions(-) |
57 |
+ |
58 |
+diff --git a/include/replicated.h b/include/replicated.h |
59 |
+index 95ff1f0d..f889a56a 100644 |
60 |
+--- a/include/replicated.h |
61 |
++++ b/include/replicated.h |
62 |
+@@ -35,6 +35,8 @@ |
63 |
+ #define NFS3_REQUESTED NFS3_SUPPORTED |
64 |
+ #define NFS4_REQUESTED NFS4_SUPPORTED |
65 |
+ |
66 |
++#define NFS4_ONLY_REQUESTED 0x0800 |
67 |
++ |
68 |
+ #define TCP_SUPPORTED 0x0001 |
69 |
+ #define UDP_SUPPORTED 0x0002 |
70 |
+ #define TCP_REQUESTED TCP_SUPPORTED |
71 |
+diff --git a/modules/mount_nfs.c b/modules/mount_nfs.c |
72 |
+index 0ab87dcf..feb5afcd 100644 |
73 |
+--- a/modules/mount_nfs.c |
74 |
++++ b/modules/mount_nfs.c |
75 |
+@@ -92,7 +92,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int |
76 |
+ mount_default_proto = defaults_get_mount_nfs_default_proto(); |
77 |
+ vers = NFS_VERS_DEFAULT | NFS_PROTO_DEFAULT; |
78 |
+ if (strcmp(fstype, "nfs4") == 0) |
79 |
+- vers = NFS4_VERS_DEFAULT | TCP_SUPPORTED; |
80 |
++ vers = NFS4_VERS_DEFAULT | TCP_SUPPORTED | NFS4_ONLY_REQUESTED; |
81 |
+ else if (mount_default_proto == 4) |
82 |
+ vers = vers | NFS4_VERS_DEFAULT; |
83 |
+ |
84 |
+@@ -157,15 +157,16 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int |
85 |
+ } else { |
86 |
+ /* Is any version of NFSv4 in the options */ |
87 |
+ if (_strncmp("vers=4", cp, 6) == 0 || |
88 |
+- _strncmp("nfsvers=4", cp, 9) == 0) |
89 |
+- vers = NFS4_VERS_MASK | TCP_SUPPORTED; |
90 |
+- else if (_strncmp("vers=3", cp, o_len) == 0 || |
91 |
++ _strncmp("nfsvers=4", cp, 9) == 0) { |
92 |
++ vers &= ~(NFS_VERS_MASK); |
93 |
++ vers |= NFS4_VERS_MASK | TCP_SUPPORTED | NFS4_ONLY_REQUESTED; |
94 |
++ } else if (_strncmp("vers=3", cp, o_len) == 0 || |
95 |
+ _strncmp("nfsvers=3", cp, o_len) == 0) { |
96 |
+- vers &= ~(NFS4_VERS_MASK | NFS_VERS_MASK); |
97 |
++ vers &= ~(NFS4_VERS_MASK | NFS_VERS_MASK | NFS4_ONLY_REQUESTED); |
98 |
+ vers |= NFS3_REQUESTED; |
99 |
+ } else if (_strncmp("vers=2", cp, o_len) == 0 || |
100 |
+ _strncmp("nfsvers=2", cp, o_len) == 0) { |
101 |
+- vers &= ~(NFS4_VERS_MASK | NFS_VERS_MASK); |
102 |
++ vers &= ~(NFS4_VERS_MASK | NFS_VERS_MASK | NFS4_ONLY_REQUESTED); |
103 |
+ vers |= NFS2_REQUESTED; |
104 |
+ } else if (strstr(cp, "port=") == cp && |
105 |
+ o_len - 5 < 25) { |
106 |
+diff --git a/modules/replicated.c b/modules/replicated.c |
107 |
+index 09075dd0..cdb7c617 100644 |
108 |
+--- a/modules/replicated.c |
109 |
++++ b/modules/replicated.c |
110 |
+@@ -291,7 +291,7 @@ static unsigned int get_nfs_info(unsigned logopt, struct host *host, |
111 |
+ |
112 |
+ rpc_info->proto = proto; |
113 |
+ if (port < 0) { |
114 |
+- if ((version & NFS4_REQUESTED) && (version & TCP_REQUESTED)) |
115 |
++ if (version & NFS4_REQUESTED && (version & NFS4_ONLY_REQUESTED)) |
116 |
+ rpc_info->port = NFS_PORT; |
117 |
+ else |
118 |
+ port = 0; |
119 |
+@@ -525,7 +525,7 @@ static int get_vers_and_cost(unsigned logopt, struct host *host, |
120 |
+ { |
121 |
+ struct conn_info pm_info, rpc_info; |
122 |
+ time_t timeout = RPC_TIMEOUT; |
123 |
+- unsigned int supported, vers = (NFS_VERS_MASK | NFS4_VERS_MASK); |
124 |
++ unsigned int supported, vers = (NFS_VERS_MASK | NFS4_VERS_MASK | NFS4_ONLY_REQUESTED); |
125 |
+ int ret = 0; |
126 |
+ |
127 |
+ if (!check_address_proto(logopt, host, version)) |