Gentoo Archives: gentoo-commits

From: Yixun Lan <dlan@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/gentoo:master commit in: net-fs/autofs/, net-fs/autofs/files/
Date: Wed, 22 Dec 2021 13:18:21
Message-Id: 1640179072.f7586f437afc004fee03a1fdf586d6dd9b7db480.dlan@gentoo
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))