From: Tom Haynes <thomas.haynes@primarydata.com>
To: Trond Myklebust <trond.myklebust@primarydata.com>
Cc: Linux NFS Mailing list <linux-nfs@vger.kernel.org>
Subject: [PATCH v5 08/51] nfsv3: introduce nfs3_set_ds_client
Date: Thu, 22 Jan 2015 15:35:40 -0800 [thread overview]
Message-ID: <1421969783-92997-9-git-send-email-loghyr@primarydata.com> (raw)
In-Reply-To: <1421969783-92997-1-git-send-email-loghyr@primarydata.com>
From: Peng Tao <tao.peng@primarydata.com>
The flexfiles layout wants to create DS connection over NFSv3.
Add nfs3_set_ds_client to allow that to happen.
Signed-off-by: Peng Tao <tao.peng@primarydata.com>
Signed-off-by: Tom Haynes <Thomas.Haynes@primarydata.com>
---
fs/nfs/internal.h | 4 ++++
fs/nfs/nfs3_fs.h | 2 ++
fs/nfs/nfs3client.c | 34 ++++++++++++++++++++++++++++++++++
fs/nfs/nfs3super.c | 2 +-
include/linux/nfs_fs_sb.h | 9 +++++----
5 files changed, 46 insertions(+), 5 deletions(-)
diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h
index 7d7c36f..7332ba1 100644
--- a/fs/nfs/internal.h
+++ b/fs/nfs/internal.h
@@ -193,6 +193,10 @@ extern struct nfs_client *nfs4_set_ds_client(struct nfs_client* mds_clp,
rpc_authflavor_t au_flavor);
extern struct rpc_clnt *nfs4_find_or_create_ds_client(struct nfs_client *,
struct inode *);
+extern struct nfs_client *nfs3_set_ds_client(struct nfs_client *mds_clp,
+ const struct sockaddr *ds_addr, int ds_addrlen,
+ int ds_proto, unsigned int ds_timeo,
+ unsigned int ds_retrans, rpc_authflavor_t au_flavor);
#ifdef CONFIG_PROC_FS
extern int __init nfs_fs_proc_init(void);
extern void nfs_fs_proc_exit(void);
diff --git a/fs/nfs/nfs3_fs.h b/fs/nfs/nfs3_fs.h
index 333ae40..e134d65 100644
--- a/fs/nfs/nfs3_fs.h
+++ b/fs/nfs/nfs3_fs.h
@@ -30,5 +30,7 @@ struct nfs_server *nfs3_create_server(struct nfs_mount_info *, struct nfs_subver
struct nfs_server *nfs3_clone_server(struct nfs_server *, struct nfs_fh *,
struct nfs_fattr *, rpc_authflavor_t);
+/* nfs3super.c */
+extern struct nfs_subversion nfs_v3;
#endif /* __LINUX_FS_NFS_NFS3_FS_H */
diff --git a/fs/nfs/nfs3client.c b/fs/nfs/nfs3client.c
index 8c1b437..52e2344 100644
--- a/fs/nfs/nfs3client.c
+++ b/fs/nfs/nfs3client.c
@@ -64,3 +64,37 @@ struct nfs_server *nfs3_clone_server(struct nfs_server *source,
nfs_init_server_aclclient(server);
return server;
}
+
+/*
+ * Set up a pNFS Data Server client over NFSv3.
+ *
+ * Return any existing nfs_client that matches server address,port,version
+ * and minorversion.
+ *
+ * For a new nfs_client, use a soft mount (default), a low retrans and a
+ * low timeout interval so that if a connection is lost, we retry through
+ * the MDS.
+ */
+struct nfs_client *nfs3_set_ds_client(struct nfs_client *mds_clp,
+ const struct sockaddr *ds_addr, int ds_addrlen,
+ int ds_proto, unsigned int ds_timeo, unsigned int ds_retrans,
+ rpc_authflavor_t au_flavor)
+{
+ struct nfs_client_initdata cl_init = {
+ .addr = ds_addr,
+ .addrlen = ds_addrlen,
+ .nfs_mod = &nfs_v3,
+ .proto = ds_proto,
+ .net = mds_clp->cl_net,
+ };
+ struct rpc_timeout ds_timeout;
+ struct nfs_client *clp;
+
+ /* Use the MDS nfs_client cl_ipaddr. */
+ nfs_init_timeout_values(&ds_timeout, ds_proto, ds_timeo, ds_retrans);
+ clp = nfs_get_client(&cl_init, &ds_timeout, mds_clp->cl_ipaddr,
+ au_flavor);
+
+ return clp;
+}
+EXPORT_SYMBOL_GPL(nfs3_set_ds_client);
diff --git a/fs/nfs/nfs3super.c b/fs/nfs/nfs3super.c
index 6af29c2..5c4394e 100644
--- a/fs/nfs/nfs3super.c
+++ b/fs/nfs/nfs3super.c
@@ -7,7 +7,7 @@
#include "nfs3_fs.h"
#include "nfs.h"
-static struct nfs_subversion nfs_v3 = {
+struct nfs_subversion nfs_v3 = {
.owner = THIS_MODULE,
.nfs_fs = &nfs_fs_type,
.rpc_vers = &nfs_version3,
diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h
index ddea982..5e1273d 100644
--- a/include/linux/nfs_fs_sb.h
+++ b/include/linux/nfs_fs_sb.h
@@ -77,10 +77,6 @@ struct nfs_client {
/* Client owner identifier */
const char * cl_owner_id;
- /* Our own IP address, as a null-terminated string.
- * This is used to generate the mv0 callback address.
- */
- char cl_ipaddr[48];
u32 cl_cb_ident; /* v4.0 callback identifier */
const struct nfs4_minor_version_ops *cl_mvops;
unsigned long cl_mig_gen;
@@ -108,6 +104,11 @@ struct nfs_client {
#define NFS_SP4_MACH_CRED_COMMIT 6 /* COMMIT */
#endif /* CONFIG_NFS_V4 */
+ /* Our own IP address, as a null-terminated string.
+ * This is used to generate the mv0 callback address.
+ */
+ char cl_ipaddr[48];
+
#ifdef CONFIG_NFS_FSCACHE
struct fscache_cookie *fscache; /* client index cache cookie */
#endif
--
1.9.3
next prev parent reply other threads:[~2015-01-22 23:36 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-22 23:35 [PATCH v5 00/51] Add Flexfile Layout Module Tom Haynes
2015-01-22 23:35 ` [PATCH v5 01/51] pnfs: Prepare for flexfiles by pulling out common code Tom Haynes
2015-01-22 23:35 ` [PATCH v5 02/51] pnfs: Do not grab the commit_info lock twice when rescheduling writes Tom Haynes
2015-01-22 23:35 ` [PATCH v5 03/51] nfs41: pull data server cache from file layout to generic pnfs Tom Haynes
2015-01-22 23:35 ` [PATCH v5 04/51] nfs41: pull decode_ds_addr " Tom Haynes
2015-01-22 23:35 ` [PATCH v5 05/51] nfs41: pull nfs4_ds_connect " Tom Haynes
2015-01-22 23:35 ` [PATCH v5 06/51] nfs41: allow LD to choose DS connection auth flavor Tom Haynes
2015-01-22 23:35 ` [PATCH v5 07/51] nfs41: move file layout macros to generic pnfs Tom Haynes
2015-01-22 23:35 ` Tom Haynes [this message]
2015-01-22 23:35 ` [PATCH v5 09/51] nfs41: allow LD to choose DS connection version/minor_version Tom Haynes
2015-01-22 23:35 ` [PATCH v5 10/51] nfs41: create NFSv3 DS connection if specified Tom Haynes
2015-01-22 23:35 ` [PATCH v5 11/51] pnfs: Add nfs_rpc_ops in calls to nfs_initiate_pgio Tom Haynes
2015-01-22 23:35 ` [PATCH v5 12/51] nfs: allow different protocol in nfs_initiate_commit Tom Haynes
2015-01-22 23:35 ` [PATCH v5 13/51] nfs4: pass slot table to nfs40_setup_sequence Tom Haynes
2015-01-22 23:35 ` [PATCH v5 14/51] nfs4: export nfs4_sequence_done Tom Haynes
2015-01-22 23:35 ` [PATCH v5 15/51] nfs: allow to specify cred in nfs_initiate_pgio Tom Haynes
2015-01-22 23:35 ` [PATCH v5 16/51] NFSv4.1/NFSv3: Add pNFS callbacks for nfs3_(read|write|commit)_done() Tom Haynes
2015-01-22 23:35 ` [PATCH v5 17/51] sunrpc: add rpc_count_iostats_idx Tom Haynes
2015-01-22 23:35 ` [PATCH v5 18/51] nfs: set hostname when creating nfsv3 ds connection Tom Haynes
2015-01-22 23:35 ` [PATCH v5 19/51] nfs/flexclient: export pnfs_layoutcommit_inode Tom Haynes
2015-01-22 23:35 ` [PATCH v5 20/51] nfs41: close a small race window when adding new layout to global list Tom Haynes
2015-01-22 23:35 ` [PATCH v5 21/51] nfs41: serialize first layoutget of a file Tom Haynes
2015-01-22 23:35 ` [PATCH v5 22/51] nfs: save server READ/WRITE/COMMIT status Tom Haynes
2015-01-22 23:35 ` [PATCH v5 23/51] nfs41: pass iomode through layoutreturn args Tom Haynes
2015-01-22 23:35 ` [PATCH v5 24/51] nfs41: make a helper function to send layoutreturn Tom Haynes
2015-01-22 23:35 ` [PATCH v5 25/51] nfs41: add a helper to mark layout for return Tom Haynes
2015-01-22 23:35 ` [PATCH v5 26/51] nfs41: don't use a layout if it is marked for returning Tom Haynes
2015-01-22 23:35 ` [PATCH v5 27/51] nfs41: send layoutreturn in last put_lseg Tom Haynes
2015-01-22 23:36 ` [PATCH v5 28/51] nfs41: clear NFS_LAYOUT_RETURN if layoutreturn is sent or failed to send Tom Haynes
2015-01-22 23:36 ` [PATCH v5 29/51] nfs/filelayout: use pnfs_error_mark_layout_for_return Tom Haynes
2015-01-22 23:36 ` [PATCH v5 30/51] nfs: introduce pg_cleanup op for pgio descriptors Tom Haynes
2015-01-22 23:36 ` [PATCH v5 31/51] pnfs: release lseg in pnfs_generic_pg_cleanup Tom Haynes
2015-01-22 23:36 ` [PATCH v5 32/51] nfs: handle overlapping reqs in lock_and_join Tom Haynes
2015-01-22 23:36 ` [PATCH v5 33/51] nfs: rename pgio header ds_idx to ds_commit_idx Tom Haynes
2015-01-22 23:36 ` [PATCH v5 34/51] pnfs: pass ds_commit_idx through the commit path Tom Haynes
2015-01-22 23:36 ` [PATCH v5 35/51] nfs: add mirroring support to pgio layer Tom Haynes
2015-01-22 23:36 ` [PATCH v5 36/51] nfs: mirroring support for direct io Tom Haynes
2015-01-22 23:36 ` [PATCH v5 37/51] pnfs: fail comparison when bucket verifier not set Tom Haynes
2015-01-22 23:36 ` [PATCH v5 38/51] nfs41: add a debug warning if we destroy an unempty layout Tom Haynes
2015-01-22 23:36 ` [PATCH v5 39/51] nfs: only reset desc->pg_mirror_idx when mirroring is supported Tom Haynes
2015-01-22 23:36 ` [PATCH v5 40/51] nfs: add nfs_pgio_current_mirror helper Tom Haynes
2015-01-22 23:36 ` [PATCH v5 41/51] pnfs: allow LD to ask to resend read through pnfs Tom Haynes
2015-01-22 23:36 ` [PATCH v5 42/51] nfs41: add range to layoutreturn args Tom Haynes
2015-01-22 23:36 ` [PATCH v5 43/51] nfs41: allow async version layoutreturn Tom Haynes
2015-01-22 23:36 ` [PATCH v5 44/51] nfs41: introduce NFS_LAYOUT_RETURN_BEFORE_CLOSE Tom Haynes
2015-01-22 23:36 ` [PATCH v5 45/51] nfs/flexfiles: send layoutreturn before freeing lseg Tom Haynes
2015-01-22 23:36 ` [PATCH v5 46/51] nfs41: add NFS_LAYOUT_RETRY_LAYOUTGET to layout header flags Tom Haynes
2015-01-22 23:36 ` [PATCH v5 47/51] nfs: add a helper to set NFS_ODIRECT_RESCHED_WRITES to direct writes Tom Haynes
2015-01-22 23:36 ` [PATCH v5 48/51] nfs41: wait for LAYOUTRETURN before retrying LAYOUTGET Tom Haynes
2015-01-22 23:36 ` [PATCH v5 49/51] nfs: count DIO good bytes correctly with mirroring Tom Haynes
2015-01-22 23:36 ` [PATCH v5 50/51] pnfs/flexfiles: Add the FlexFile Layout Driver Tom Haynes
2015-01-22 23:36 ` [PATCH v5 51/51] pnfs: Update documentation on the Layout Drivers Tom Haynes
2015-01-23 8:07 ` [PATCH v5 00/51] Add Flexfile Layout Module Christoph Hellwig
2015-01-23 8:27 ` Christoph Hellwig
2015-01-24 14:33 ` Hi Christoph, Peng Tao
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=1421969783-92997-9-git-send-email-loghyr@primarydata.com \
--to=thomas.haynes@primarydata.com \
--cc=linux-nfs@vger.kernel.org \
--cc=trond.myklebust@primarydata.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.