From: Petr Vorel <pvorel@suse.cz>
To: linux-nfs@vger.kernel.org
Cc: Petr Vorel <pvorel@suse.cz>, Steve Dickson <steved@redhat.com>,
NeilBrown <neilb@suse.com>, Chuck Lever <chuck.lever@oracle.com>,
"J . Bruce Fields" <bfields@fieldses.org>,
Alexey Kodanev <alexey.kodanev@oracle.com>
Subject: [RFC PATCH 1/1] mount.nfs: Fix mounting on tmpfs
Date: Thu, 22 Apr 2021 21:18:03 +0200 [thread overview]
Message-ID: <20210422191803.31511-1-pvorel@suse.cz> (raw)
LTP NFS tests (which use netns) fails on tmpfs since d4066486:
mount -t nfs -o proto=tcp,vers=4.2 10.0.0.2:/tmp/ltp.nfs01.nfs-4.2/LTP_nfs01.UF6gRZCy3O/4.2/tcp /tmp/ltp.nfs01.nfs-4.2/LTP_nfs01.UF6gRZCy3O/4.2/0
mount.nfs: mounting 10.0.0.2:/tmp/ltp.nfs01.nfs-4.2/LTP_nfs01.UF6gRZCy3O/4.2/tcp failed, reason given by server: No such file or directory
Fixes: d4066486 ("mount.nfs: improve version negotiation when vers=4 is specified.")
Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
Hi,
not sure, if this is a correct fix thus RFC (I'm not from @umn.edu :)).
I suppose tmpfs is still meant to be supported, but maybe I'm wrong.
I did testing with LTP [1]:
$ for i in 3 4 4.1 4.2; do echo "* version: $i"; PATH="/opt/ltp/testcases/bin:$PATH" nfs01 -v $i -t tcp; done
Core of the tests is nfs_lib.sh [2], which sets network namespace (with
help of tst_net.sh [3]) and setup nfs with exportfs (use fsid to be
working properly on tmpfs) and run various tests with these NFS
versions: 3, 4, 4.1, 4.2.
Kind regards,
Petr
[1] https://github.com/linux-test-project/ltp
[2] https://github.com/linux-test-project/ltp/blob/master/testcases/network/nfs/nfs_stress/nfs_lib.sh
[3] https://github.com/linux-test-project/ltp/blob/master/testcases/lib/tst_net.sh
utils/mount/Makefile.am | 3 ++-
utils/mount/stropts.c | 29 ++++++++++++++++++++++++++---
2 files changed, 28 insertions(+), 4 deletions(-)
diff --git a/utils/mount/Makefile.am b/utils/mount/Makefile.am
index ad0be93b..d3905bec 100644
--- a/utils/mount/Makefile.am
+++ b/utils/mount/Makefile.am
@@ -28,7 +28,8 @@ endif
mount_nfs_LDADD = ../../support/nfs/libnfs.la \
../../support/export/libexport.a \
../../support/misc/libmisc.a \
- $(LIBTIRPC)
+ $(LIBTIRPC) \
+ $(LIBPTHREAD)
mount_nfs_SOURCES = $(mount_common)
diff --git a/utils/mount/stropts.c b/utils/mount/stropts.c
index 174a05f6..3961b8ce 100644
--- a/utils/mount/stropts.c
+++ b/utils/mount/stropts.c
@@ -31,6 +31,7 @@
#include <time.h>
#include <sys/socket.h>
+#include <sys/statfs.h>
#include <sys/mount.h>
#include <netinet/in.h>
#include <arpa/inet.h>
@@ -50,6 +51,7 @@
#include "parse_dev.h"
#include "conffile.h"
#include "misc.h"
+#include "nfsd_path.h"
#ifndef NFS_PROGRAM
#define NFS_PROGRAM (100003)
@@ -104,6 +106,21 @@ struct nfsmount_info {
child; /* forked bg child? */
};
+/*
+ * Returns TRUE if mounting on tmpfs, otherwise FALSE.
+ */
+static int is_tmpfs(struct nfsmount_info *mi)
+{
+ struct statfs64 st;
+
+ if (nfsd_path_statfs64(mi->node, &st)) {
+ nfs_error(_("%s: Failed to statfs64 on path %s: %s"),
+ progname, mi->node, strerror(errno));
+ return 0;
+ }
+
+ return st.f_type == 0x01021994;
+}
static void nfs_default_version(struct nfsmount_info *mi)
{
@@ -873,6 +890,9 @@ static int nfs_try_mount_v4(struct nfsmount_info *mi)
case EACCES:
continue;
default:
+ if (is_tmpfs(mi))
+ return 1;
+
goto out;
}
}
@@ -951,9 +971,12 @@ check_result:
}
fall_back:
- if (mi->version.v_mode == V_GENERAL)
- /* v2,3 fallback not allowed */
- return result;
+ if (mi->version.v_mode == V_GENERAL) {
+
+ /* v2,3 fallback not allowed unless tmpfs */
+ if (!is_tmpfs(mi))
+ return result;
+ }
/*
* Save the original errno in case the v3
--
2.31.1
next reply other threads:[~2021-04-22 19:18 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-22 19:18 Petr Vorel [this message]
2021-04-22 20:23 ` [RFC PATCH 1/1] mount.nfs: Fix mounting on tmpfs J . Bruce Fields
2021-04-23 2:17 ` Petr Vorel
2021-04-23 14:23 ` J . Bruce Fields
2021-04-23 17:04 ` Petr Vorel
2021-04-23 18:13 ` J . Bruce Fields
2021-04-23 20:37 ` Petr Vorel
2021-05-03 2:21 ` NeilBrown
2021-05-03 8:10 ` Petr Vorel
2021-05-03 14:15 ` J . Bruce Fields
2021-04-23 13:50 ` Petr Vorel
2021-05-07 1:48 ` [PATCH/RFC nfs-utils] Fix NFSv4 export of tmpfs filesystems NeilBrown
2021-05-07 10:06 ` Petr Vorel
2021-05-13 4:07 ` NeilBrown
2021-05-13 18:38 ` Petr Vorel
2021-05-13 18:51 ` Petr Vorel
2021-05-17 3:08 ` NeilBrown
2021-05-17 14:27 ` Petr Vorel
2021-05-07 13:55 ` Chuck Lever III
2021-05-07 23:13 ` NeilBrown
2021-05-17 4:45 ` [PATCH/RFC v2 " NeilBrown
2021-05-17 15:00 ` Petr Vorel
2021-05-18 17:54 ` Petr Vorel
2021-05-20 17:37 ` Steve Dickson
2021-05-20 20:39 ` Petr Vorel
2021-05-21 1:38 ` NeilBrown
2021-05-21 1:40 ` [PATCH nfs-utils 1/2] Remove 'force' arg from cache_flush() NeilBrown
2021-05-21 1:41 ` [PATCH nfs-utils 2/2] Move declaration of etab and rmtab into libraries NeilBrown
2021-05-21 13:57 ` Petr Vorel
2021-05-23 18:31 ` Steve Dickson
2021-05-21 13:52 ` [PATCH nfs-utils 1/2] Remove 'force' arg from cache_flush() Petr Vorel
2021-05-23 18:30 ` Steve Dickson
2021-05-23 18:29 ` [PATCH/RFC v2 nfs-utils] Fix NFSv4 export of tmpfs filesystems Steve Dickson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210422191803.31511-1-pvorel@suse.cz \
--to=pvorel@suse.cz \
--cc=alexey.kodanev@oracle.com \
--cc=bfields@fieldses.org \
--cc=chuck.lever@oracle.com \
--cc=linux-nfs@vger.kernel.org \
--cc=neilb@suse.com \
--cc=steved@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).