]> git.karo-electronics.de Git - linux-beck.git/commitdiff
rpcrdma: Merge svcrdma and xprtrdma modules into one
authorChuck Lever <chuck.lever@oracle.com>
Thu, 4 Jun 2015 15:21:42 +0000 (11:21 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Thu, 4 Jun 2015 20:56:02 +0000 (16:56 -0400)
Bi-directional RPC support means code in svcrdma.ko invokes a bit of
code in xprtrdma.ko, and vice versa. To avoid loader/linker loops,
merge the server and client side modules together into a single
module.

When backchannel capabilities are added, the combined module will
register all needed transport capabilities so that Upper Layer
consumers automatically have everything needed to create a
bi-directional transport connection.

Module aliases are added for backwards compatibility with user
space, which still may expect svcrdma.ko or xprtrdma.ko to be
present.

This commit reverts commit 2e8c12e1b765 ("xprtrdma: add separate
Kconfig options for NFSoRDMA client and server support") and
provides a single CONFIG option for enabling the new module.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
net/sunrpc/Kconfig
net/sunrpc/Makefile
net/sunrpc/xprtrdma/Makefile
net/sunrpc/xprtrdma/module.c [new file with mode: 0644]
net/sunrpc/xprtrdma/svc_rdma.c
net/sunrpc/xprtrdma/transport.c
net/sunrpc/xprtrdma/xprt_rdma.h

index 9068e72aa73c7c93fb34df75461f81713f485828..04ce2c0b660e0d381a22038bb463d46312befaf5 100644 (file)
@@ -48,28 +48,16 @@ config SUNRPC_DEBUG
 
          If unsure, say Y.
 
-config SUNRPC_XPRT_RDMA_CLIENT
-       tristate "RPC over RDMA Client Support"
+config SUNRPC_XPRT_RDMA
+       tristate "RPC-over-RDMA transport"
        depends on SUNRPC && INFINIBAND && INFINIBAND_ADDR_TRANS
        default SUNRPC && INFINIBAND
        help
-         This option allows the NFS client to support an RDMA-enabled
-         transport.
+         This option allows the NFS client and server to use RDMA
+         transports (InfiniBand, iWARP, or RoCE).
 
-         To compile RPC client RDMA transport support as a module,
-         choose M here: the module will be called xprtrdma.
+         To compile this support as a module, choose M. The module
+         will be called rpcrdma.ko.
 
-         If unsure, say N.
-
-config SUNRPC_XPRT_RDMA_SERVER
-       tristate "RPC over RDMA Server Support"
-       depends on SUNRPC && INFINIBAND && INFINIBAND_ADDR_TRANS
-       default SUNRPC && INFINIBAND
-       help
-         This option allows the NFS server to support an RDMA-enabled
-         transport.
-
-         To compile RPC server RDMA transport support as a module,
-         choose M here: the module will be called svcrdma.
-
-         If unsure, say N.
+         If unsure, or you know there is no RDMA capability on your
+         hardware platform, say N.
index 15e6f6c23c5d150aa7b0c22bbd6315bc0d5814cb..936ad0a15371ac4f1e49b8785ef645fa65583e83 100644 (file)
@@ -5,8 +5,7 @@
 
 obj-$(CONFIG_SUNRPC) += sunrpc.o
 obj-$(CONFIG_SUNRPC_GSS) += auth_gss/
-
-obj-y += xprtrdma/
+obj-$(CONFIG_SUNRPC_XPRT_RDMA) += xprtrdma/
 
 sunrpc-y := clnt.o xprt.o socklib.o xprtsock.o sched.o \
            auth.o auth_null.o auth_unix.o auth_generic.o \
index 579f72bbcf4ba66eb58b7c9cfde0bde812c996e2..48913de240bd448fe600a8cd1e97f8e0e860866d 100644 (file)
@@ -1,9 +1,7 @@
-obj-$(CONFIG_SUNRPC_XPRT_RDMA_CLIENT) += xprtrdma.o
+obj-$(CONFIG_SUNRPC_XPRT_RDMA) += rpcrdma.o
 
-xprtrdma-y := transport.o rpc_rdma.o verbs.o \
-       fmr_ops.o frwr_ops.o physical_ops.o
-
-obj-$(CONFIG_SUNRPC_XPRT_RDMA_SERVER) += svcrdma.o
-
-svcrdma-y := svc_rdma.o svc_rdma_transport.o \
-       svc_rdma_marshal.o svc_rdma_sendto.o svc_rdma_recvfrom.o
+rpcrdma-y := transport.o rpc_rdma.o verbs.o \
+       fmr_ops.o frwr_ops.o physical_ops.o \
+       svc_rdma.o svc_rdma_transport.o \
+       svc_rdma_marshal.o svc_rdma_sendto.o svc_rdma_recvfrom.o \
+       module.o
diff --git a/net/sunrpc/xprtrdma/module.c b/net/sunrpc/xprtrdma/module.c
new file mode 100644 (file)
index 0000000..560712b
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2015 Oracle.  All rights reserved.
+ */
+
+/* rpcrdma.ko module initialization
+ */
+
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/sunrpc/svc_rdma.h>
+#include "xprt_rdma.h"
+
+#if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
+# define RPCDBG_FACILITY       RPCDBG_TRANS
+#endif
+
+MODULE_AUTHOR("Open Grid Computing and Network Appliance, Inc.");
+MODULE_DESCRIPTION("RPC/RDMA Transport");
+MODULE_LICENSE("Dual BSD/GPL");
+MODULE_ALIAS("svcrdma");
+MODULE_ALIAS("xprtrdma");
+
+static void __exit rpc_rdma_cleanup(void)
+{
+       xprt_rdma_cleanup();
+       svc_rdma_cleanup();
+}
+
+static int __init rpc_rdma_init(void)
+{
+       int rc;
+
+       rc = svc_rdma_init();
+       if (rc)
+               goto out;
+
+       rc = xprt_rdma_init();
+       if (rc)
+               svc_rdma_cleanup();
+
+out:
+       return rc;
+}
+
+module_init(rpc_rdma_init);
+module_exit(rpc_rdma_cleanup);
index c1b6270262c297f8af8c902c40eec32aa6eae215..2cd252f023a549231763b62c36c03de45774e37d 100644 (file)
@@ -38,8 +38,7 @@
  *
  * Author: Tom Tucker <tom@opengridcomputing.com>
  */
-#include <linux/module.h>
-#include <linux/init.h>
+
 #include <linux/slab.h>
 #include <linux/fs.h>
 #include <linux/sysctl.h>
@@ -295,8 +294,3 @@ int svc_rdma_init(void)
        destroy_workqueue(svc_rdma_wq);
        return -ENOMEM;
 }
-MODULE_AUTHOR("Tom Tucker <tom@opengridcomputing.com>");
-MODULE_DESCRIPTION("SVC RDMA Transport");
-MODULE_LICENSE("Dual BSD/GPL");
-module_init(svc_rdma_init);
-module_exit(svc_rdma_cleanup);
index 54f23b1be98617d5c29fb482a221ad6ed1391876..436da2caec955ded2b2f4f6a2056cb1191594373 100644 (file)
@@ -48,7 +48,6 @@
  */
 
 #include <linux/module.h>
-#include <linux/init.h>
 #include <linux/slab.h>
 #include <linux/seq_file.h>
 #include <linux/sunrpc/addr.h>
 # define RPCDBG_FACILITY       RPCDBG_TRANS
 #endif
 
-MODULE_LICENSE("Dual BSD/GPL");
-
-MODULE_DESCRIPTION("RPC/RDMA Transport for Linux kernel NFS");
-MODULE_AUTHOR("Network Appliance, Inc.");
-
 /*
  * tunables
  */
@@ -711,7 +705,7 @@ static struct xprt_class xprt_rdma = {
        .setup                  = xprt_setup_rdma,
 };
 
-static void __exit xprt_rdma_cleanup(void)
+void xprt_rdma_cleanup(void)
 {
        int rc;
 
@@ -728,7 +722,7 @@ static void __exit xprt_rdma_cleanup(void)
                        __func__, rc);
 }
 
-static int __init xprt_rdma_init(void)
+int xprt_rdma_init(void)
 {
        int rc;
 
@@ -753,6 +747,3 @@ static int __init xprt_rdma_init(void)
 #endif
        return 0;
 }
-
-module_init(xprt_rdma_init);
-module_exit(xprt_rdma_cleanup);
index e60907b0e1f1643f7aa685a74a09a908c089ece8..58163b88738c2363c559be28d3f3807043065826 100644 (file)
@@ -480,6 +480,11 @@ void rpcrdma_reply_handler(struct rpcrdma_rep *);
  */
 int rpcrdma_marshal_req(struct rpc_rqst *);
 
+/* RPC/RDMA module init - xprtrdma/transport.c
+ */
+int xprt_rdma_init(void);
+void xprt_rdma_cleanup(void);
+
 /* Temporary NFS request map cache. Created in svc_rdma.c  */
 extern struct kmem_cache *svc_rdma_map_cachep;
 /* WR context cache. Created in svc_rdma.c  */