RDS: Modularize RDMA and TCP transports
authorAndy Grover <andy.grover@oracle.com>
Fri, 21 Aug 2009 12:28:33 +0000 (12:28 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 24 Aug 2009 02:13:09 +0000 (19:13 -0700)
Enable the building of transports as modules.

Also, improve consistency of Kconfig messages in relation to other
protocols, and move build dependency on IB from the RDS core code
to the rds_rdma module.

Signed-off-by: Andy Grover <andy.grover@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/rds/Kconfig
net/rds/Makefile
net/rds/af_rds.c
net/rds/rdma_transport.c

index 796773b5df9b819c1bf33f90654556187264fe9d..ec753b3ae72ade6005cecee012ec1e2759a7fb45 100644 (file)
@@ -1,14 +1,28 @@
 
 config RDS
-       tristate "Reliable Datagram Sockets (RDS) (EXPERIMENTAL)"
-       depends on INET && INFINIBAND_IPOIB && EXPERIMENTAL
-       depends on INFINIBAND && INFINIBAND_ADDR_TRANS
+       tristate "The RDS Protocol (EXPERIMENTAL)"
+       depends on INET && EXPERIMENTAL
        ---help---
-         RDS provides reliable, sequenced delivery of datagrams
-         over Infiniband.
+         The RDS (Reliable Datagram Sockets) protocol provides reliable,
+         sequenced delivery of datagrams over Infiniband, iWARP,
+         or TCP.
+
+config RDS_RDMA
+       tristate "RDS over Infiniband and iWARP"
+       depends on RDS && INFINIBAND && INFINIBAND_ADDR_TRANS
+       ---help---
+         Allow RDS to use Infiniband and iWARP as a transport.
+         This transport supports RDMA operations.
+
+config RDS_TCP
+       tristate "RDS over TCP"
+       depends on RDS
+       ---help---
+         Allow RDS to use TCP as a transport.
+         This transport does not support RDMA operations.
 
 config RDS_DEBUG
-        bool "Debugging messages"
+        bool "RDS debugging messages"
        depends on RDS
         default n
 
index 51f27585fa083f840d228f59c7a2b1968c6ab095..b46eca109688b703e443ac2d63e09da9afcbec18 100644 (file)
@@ -1,13 +1,20 @@
 obj-$(CONFIG_RDS) += rds.o
 rds-y :=       af_rds.o bind.o cong.o connection.o info.o message.o   \
                        recv.o send.o stats.o sysctl.o threads.o transport.o \
-                       loop.o page.o rdma.o \
-                       rdma_transport.o \
+                       loop.o page.o rdma.o
+
+obj-$(CONFIG_RDS_RDMA) += rds_rdma.o
+rds_rdma-objs :=       rdma_transport.o \
                        ib.o ib_cm.o ib_recv.o ib_ring.o ib_send.o ib_stats.o \
                        ib_sysctl.o ib_rdma.o \
                        iw.o iw_cm.o iw_recv.o iw_ring.o iw_send.o iw_stats.o \
                        iw_sysctl.o iw_rdma.o
 
+
+obj-$(CONFIG_RDS_TCP) += rds_tcp.o
+rds_tcp-objs :=                tcp.o tcp_connect.o tcp_listen.o tcp_recv.o \
+                       tcp_send.o tcp_stats.o
+
 ifeq ($(CONFIG_RDS_DEBUG), y)
 EXTRA_CFLAGS += -DDEBUG
 endif
index b11e7e5278646993bfda7d6ed78fa2daefd3efde..108ed2e671c5599a413d028feb1591962c978004 100644 (file)
@@ -39,7 +39,6 @@
 
 #include "rds.h"
 #include "rdma.h"
-#include "rdma_transport.h"
 
 /* this is just used for stats gathering :/ */
 static DEFINE_SPINLOCK(rds_sock_lock);
@@ -509,7 +508,6 @@ out:
 
 static void __exit rds_exit(void)
 {
-       rds_rdma_exit();
        sock_unregister(rds_family_ops.family);
        proto_unregister(&rds_proto);
        rds_conn_exit();
@@ -549,14 +547,8 @@ static int __init rds_init(void)
        rds_info_register_func(RDS_INFO_SOCKETS, rds_sock_info);
        rds_info_register_func(RDS_INFO_RECV_MESSAGES, rds_sock_inc_info);
 
-       /* ib/iwarp transports currently compiled-in */
-       ret = rds_rdma_init();
-       if (ret)
-               goto out_sock;
        goto out;
 
-out_sock:
-       sock_unregister(rds_family_ops.family);
 out_proto:
        proto_unregister(&rds_proto);
 out_stats:
index 7a6c748cb56cb0885a829bc1a5b529e5af3ba73d..9ece910ea394317a7b8dc9fd80e6a7c540e5f9b3 100644 (file)
@@ -203,6 +203,7 @@ err_iw_init:
 out:
        return ret;
 }
+module_init(rds_rdma_init);
 
 void rds_rdma_exit(void)
 {
@@ -211,4 +212,9 @@ void rds_rdma_exit(void)
        rds_ib_exit();
        rds_iw_exit();
 }
+module_exit(rds_rdma_exit);
+
+MODULE_AUTHOR("Oracle Corporation <rds-devel@oss.oracle.com>");
+MODULE_DESCRIPTION("RDS: IB/iWARP transport");
+MODULE_LICENSE("Dual BSD/GPL");