From: Trond Myklebust <trondmy@gmail.com>
To: SteveD@redhat.com
Cc: linux-nfs@vger.kernel.org
Subject: [RFC PATCH v2 7/7] Add support for the nfsd root directory to exportfs
Date: Tue, 21 May 2019 08:47:01 -0400 [thread overview]
Message-ID: <20190521124701.61849-8-trond.myklebust@hammerspace.com> (raw)
In-Reply-To: <20190521124701.61849-7-trond.myklebust@hammerspace.com>
Ensure that exportfs also resolves paths relative to the nfsd root
directory
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
---
utils/exportfs/Makefile.am | 2 +-
utils/exportfs/exportfs.c | 32 ++++++++++++++++++++++++++++++--
2 files changed, 31 insertions(+), 3 deletions(-)
diff --git a/utils/exportfs/Makefile.am b/utils/exportfs/Makefile.am
index 4b291610d19b..96524c729359 100644
--- a/utils/exportfs/Makefile.am
+++ b/utils/exportfs/Makefile.am
@@ -10,6 +10,6 @@ exportfs_SOURCES = exportfs.c
exportfs_LDADD = ../../support/export/libexport.a \
../../support/nfs/libnfs.la \
../../support/misc/libmisc.a \
- $(LIBWRAP) $(LIBNSL)
+ $(LIBWRAP) $(LIBNSL) $(LIBPTHREAD)
MAINTAINERCLEANFILES = Makefile.in
diff --git a/utils/exportfs/exportfs.c b/utils/exportfs/exportfs.c
index 333eadcd0228..05481ad3f896 100644
--- a/utils/exportfs/exportfs.c
+++ b/utils/exportfs/exportfs.c
@@ -33,8 +33,10 @@
#include "sockaddr.h"
#include "misc.h"
+#include "nfsd_path.h"
#include "nfslib.h"
#include "exportfs.h"
+#include "workqueue.h"
#include "xlog.h"
#include "conffile.h"
@@ -52,6 +54,29 @@ static const char *lockfile = EXP_LOCKFILE;
static int _lockfd = -1;
struct state_paths etab;
+static struct xthread_workqueue *exportfs_wq;
+
+static ssize_t exportfs_write(int fd, const char *buf, size_t len)
+{
+ if (exportfs_wq)
+ return xthread_write(exportfs_wq, fd, buf, len);
+ return write(fd, buf, len);
+}
+
+static void
+exportfs_setup_workqueue(void)
+{
+ const char *chroot = nfsd_path_nfsd_rootdir();
+
+ if (!chroot || chroot[0] == '\0')
+ return;
+ if (chroot[0] == '/' && chroot[1] == '\0')
+ return;
+ exportfs_wq = xthread_workqueue_alloc();
+ if (!exportfs_wq)
+ return;
+ xthread_workqueue_chroot(exportfs_wq, chroot);
+}
/*
* If we aren't careful, changes made by exportfs can be lost
@@ -109,6 +134,7 @@ main(int argc, char **argv)
conf_init_file(NFS_CONFFILE);
xlog_from_conffile("exportfs");
+ nfsd_path_init();
/* NOTE: following uses "mountd" section of nfs.conf !!!! */
s = conf_get_str("mountd", "state-directory-path");
@@ -181,6 +207,8 @@ main(int argc, char **argv)
}
}
+ exportfs_setup_workqueue();
+
/*
* Serialize things as best we can
*/
@@ -505,7 +533,7 @@ static int test_export(nfs_export *exp, int with_fsid)
fd = open("/proc/net/rpc/nfsd.export/channel", O_WRONLY);
if (fd < 0)
return 0;
- n = write(fd, buf, strlen(buf));
+ n = exportfs_write(fd, buf, strlen(buf));
close(fd);
if (n < 0)
return 0;
@@ -521,7 +549,7 @@ validate_export(nfs_export *exp)
* otherwise trial-export to '-test-client-' and check for failure.
*/
struct stat stb;
- char *path = exp->m_export.e_path;
+ char *path = exportent_realpath(&exp->m_export);
struct statfs64 stf;
int fs_has_fsid = 0;
--
2.21.0
next prev parent reply other threads:[~2019-05-21 12:49 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-21 12:46 [RFC PATCH v2 0/7] Add a root_dir option to nfs.conf Trond Myklebust
2019-05-21 12:46 ` [RFC PATCH v2 1/7] mountd: Ensure we don't share cache file descriptors among processes Trond Myklebust
2019-05-21 12:46 ` [RFC PATCH v2 2/7] Add a simple workqueue mechanism Trond Myklebust
2019-05-21 12:46 ` [RFC PATCH v2 3/7] Add utilities for resolving nfsd paths and stat()ing them Trond Myklebust
2019-05-21 12:46 ` [RFC PATCH v2 4/7] Add a helper to return the real path given an export entry Trond Myklebust
2019-05-21 12:46 ` [RFC PATCH v2 5/7] Add helpers to read/write to a file through the chrooted thread Trond Myklebust
2019-05-21 12:47 ` [RFC PATCH v2 6/7] Add support for the nfsd rootdir configuration option to rpc.mountd Trond Myklebust
2019-05-21 12:47 ` Trond Myklebust [this message]
2019-05-21 17:40 ` [RFC PATCH v2 0/7] Add a root_dir option to nfs.conf Chuck Lever
2019-05-21 18:17 ` Trond Myklebust
2019-05-21 18:59 ` Trond Myklebust
2019-05-21 19:06 ` Chuck Lever
2019-05-21 19:58 ` Trond Myklebust
2019-05-28 15:25 ` Steve Dickson
2019-05-28 16:44 ` Trond Myklebust
2019-05-28 16:47 ` Chuck Lever
2019-05-28 16:50 ` Trond Myklebust
2019-05-28 17:40 ` Steve Dickson
2019-05-28 18:19 ` Trond Myklebust
2019-05-28 19:33 ` Steve Dickson
2019-05-28 15:30 ` Chuck Lever
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=20190521124701.61849-8-trond.myklebust@hammerspace.com \
--to=trondmy@gmail.com \
--cc=SteveD@redhat.com \
--cc=linux-nfs@vger.kernel.org \
/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