[rds-commits] zab commits r94 - in trunk: . linux/net/rds

svn-commits@oss.oracle.com svn-commits at oss.oracle.com
Thu Jun 1 16:21:43 CDT 2006


Author: zab
Date: 2006-06-01 16:21:42 -0500 (Thu, 01 Jun 2006)
New Revision: 94

Modified:
   trunk/configure.in
   trunk/linux/net/rds/rds.h
   trunk/linux/net/rds/tcp.c
   trunk/linux/net/rds/tcp.h
   trunk/linux/net/rds/tcp_connect.c
   trunk/linux/net/rds/tcp_listen.c
Log:
Fix the build for RHEL4/x86-64

inet_sk() can return either inet_opt or inet_sock in different kernels.

tcp_sk() varies similarly so call setsockopt directly to avoid having to
use it.

x86-64 has the index argument to atomic_kmap() dropped in the macro so it
never includes kmap_types.h but we need it to pass around enum km_type.


Modified: trunk/configure.in
===================================================================
--- trunk/configure.in	2006-06-01 19:00:18 UTC (rev 93)
+++ trunk/configure.in	2006-06-01 21:21:42 UTC (rev 94)
@@ -148,6 +148,10 @@
 	KAPI_COMPAT_CFLAGS="-DKERNEL_HAS_INET_HASHTABLES $KAPI_COMPAT_CFLAGS", ,
 	[ ])
 
+GREP_KERNEL_INCLUDE([inet_sk() returning inet_sock], linux/ip.h,
+	KAPI_COMPAT_CFLAGS="-DKERNEL_HAS_INET_SK_RETURNING_INET_SOCK $KAPI_COMPAT_CFLAGS", ,
+	[struct inet_sock \* inet_sk])
+
 # using -include has two advantages:
 #  the source doesn't need to know to include compat headers
 #  the compat header file names don't go through the search path

Modified: trunk/linux/net/rds/rds.h
===================================================================
--- trunk/linux/net/rds/rds.h	2006-06-01 19:00:18 UTC (rev 93)
+++ trunk/linux/net/rds/rds.h	2006-06-01 21:21:42 UTC (rev 94)
@@ -3,6 +3,9 @@
 
 #include <net/sock.h>
 
+/* x86-64 doesn't include kmap_types.h from anywhere */
+#include <asm/kmap_types.h>
+
 #ifdef KERNEL_HAS_PROTO_REGISTER
 #define rds_debug(rs, args...) SOCK_DEBUG(&(rs)->rs_sk, ##args)
 #endif

Modified: trunk/linux/net/rds/tcp.c
===================================================================
--- trunk/linux/net/rds/tcp.c	2006-06-01 19:00:18 UTC (rev 93)
+++ trunk/linux/net/rds/tcp.c	2006-06-01 21:21:42 UTC (rev 94)
@@ -29,12 +29,24 @@
 
 #define RDS_TCP_DEFAULT_BUFSIZE (128 * 1024)
 
-void rds_tcp_tune(struct sock *sk)
+/* doing it this way avoids calling tcp_sk() */
+void rds_tcp_nonagle(struct socket *sock)
 {
-	struct tcp_sock *tp = tcp_sk(sk);
+	mm_segment_t oldfs = get_fs();
+	int val = 1;
 
-	tp->nonagle = TCP_NAGLE_OFF;
+	set_fs(KERNEL_DS);
+	sock->ops->setsockopt(sock, SOL_TCP, TCP_NODELAY, (char __user *)&val,
+			      sizeof(val));
+	set_fs(oldfs);
+}
 
+void rds_tcp_tune(struct socket *sock)
+{
+	struct sock *sk = sock->sk;
+
+	rds_tcp_nonagle(sock);
+
 	/*
 	 * We're trying to saturate gigabit with the default,
 	 * see svc_sock_setbufsize().

Modified: trunk/linux/net/rds/tcp.h
===================================================================
--- trunk/linux/net/rds/tcp.h	2006-06-01 19:00:18 UTC (rev 93)
+++ trunk/linux/net/rds/tcp.h	2006-06-01 21:21:42 UTC (rev 94)
@@ -38,7 +38,8 @@
 /* tcp.c */
 int __init rds_tcp_init(void);
 void __exit rds_tcp_exit(void);
-void rds_tcp_tune(struct sock *sk);
+void rds_tcp_tune(struct socket *sock);
+void rds_tcp_nonagle(struct socket *sock);
 void rds_tcp_set_callbacks(struct socket *sock, struct rds_tcp_connection *tc);
 void rds_tcp_restore_callbacks(struct socket *sock,
 			       struct rds_tcp_connection *tc);

Modified: trunk/linux/net/rds/tcp_connect.c
===================================================================
--- trunk/linux/net/rds/tcp_connect.c	2006-06-01 19:00:18 UTC (rev 93)
+++ trunk/linux/net/rds/tcp_connect.c	2006-06-01 21:21:42 UTC (rev 94)
@@ -86,7 +86,7 @@
 	if (ret < 0)
 		goto out;
 
-	rds_tcp_tune(sock->sk);
+	rds_tcp_tune(sock);
 
 	src.sin_family = AF_INET;
 	src.sin_addr.s_addr = (__force u32)conn->c_laddr;

Modified: trunk/linux/net/rds/tcp_listen.c
===================================================================
--- trunk/linux/net/rds/tcp_listen.c	2006-06-01 19:00:18 UTC (rev 93)
+++ trunk/linux/net/rds/tcp_listen.c	2006-06-01 21:21:42 UTC (rev 94)
@@ -35,9 +35,14 @@
 {
 	struct socket *new_sock = NULL;
 	struct rds_connection *conn;
-	struct inet_sock *inet;
 	struct rds_tcp_connection *tc;
 	int ret;
+#ifdef KERNEL_HAS_INET_SK_RETURNING_INET_SOCK
+	struct inet_sock *inet;
+#endif /* KERNEL_HAS_INET_SK_RETURNING_INET_SOCK */
+#ifndef KERNEL_HAS_INET_SK_RETURNING_INET_SOCK
+	struct inet_opt *inet;
+#endif /* KERNEL_HAS_INET_SK_RETURNING_INET_SOCK */
 
 	ret = sock_create_lite(sock->sk->sk_family, sock->sk->sk_type,
 			       sock->sk->sk_protocol, &new_sock);
@@ -50,7 +55,7 @@
 	if (ret < 0)
 		goto out;
 
-	rds_tcp_tune(new_sock->sk);
+	rds_tcp_tune(new_sock);
 
 	inet = inet_sk(new_sock->sk);
 
@@ -131,7 +136,6 @@
 {
 	struct sockaddr_in sin;
 	struct socket *sock = NULL;
-	struct tcp_sock *tp;
 	int ret;
 
 	ret = sock_create(PF_INET, SOCK_STREAM, IPPROTO_TCP, &sock);
@@ -139,8 +143,7 @@
 		goto out;
 
 	sock->sk->sk_reuse = 1;
-	tp = tcp_sk(sock->sk);
-	tp->nonagle = TCP_NAGLE_OFF;
+	rds_tcp_nonagle(sock);
 
 	write_lock_bh(&sock->sk->sk_callback_lock);
 	sock->sk->sk_user_data = sock->sk->sk_data_ready;




More information about the rds-commits mailing list