Whamcloud - gitweb
LU-506 kernel: FC15 - tcp_sendpage() uses struct sock.
authoryangsheng <ys@whamcloud.com>
Thu, 8 Dec 2011 00:10:20 +0000 (08:10 +0800)
committerOleg Drokin <green@whamcloud.com>
Fri, 9 Dec 2011 03:24:17 +0000 (22:24 -0500)
Since 2.6.36 tcp_sendpage() uses 'struct sock' as 1st argument
instead of 'struct socket'.

Change-Id: I1641541e3e52f3f47c2dfeb63a5311f5f9a0634a
Signed-off-by: Yang Sheng <ys@whamcloud.com>
Reviewed-on: http://review.whamcloud.com/1739
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lnet/autoconf/lustre-lnet.m4
lnet/include/lnet/linux/lnet.h
lnet/klnds/socklnd/socklnd_lib-linux.c

index 1a070ac..6ed99bf 100644 (file)
@@ -547,16 +547,16 @@ AC_DEFUN([LN_CONFIG_USERSPACE],
 AC_DEFUN([LN_5ARGS_SYSCTL_PROC_HANDLER],
 [AC_MSG_CHECKING([if sysctl proc_handler wants 5 args])
 LB_LINUX_TRY_COMPILE([
-       #include <linux/sysctl.h>
+        #include <linux/sysctl.h>
 ],[
         struct ctl_table *table = NULL;
-       int write = 1;
-       void __user *buffer = NULL;
-       size_t *lenp = NULL;
-       loff_t *ppos = NULL;
+        int write = 1;
+        void __user *buffer = NULL;
+        size_t *lenp = NULL;
+        loff_t *ppos = NULL;
 
-       proc_handler *proc_handler;
-       proc_handler(table, write, buffer, lenp, ppos);
+        proc_handler *proc_handler;
+        proc_handler(table, write, buffer, lenp, ppos);
 
 ],[
         AC_MSG_RESULT(yes)
@@ -568,6 +568,28 @@ LB_LINUX_TRY_COMPILE([
 ])
 
 #
+# 2.6.36 tcp_sendpage() first parameter is 'struct sock' instead of 'struct socket'.
+#
+AC_DEFUN([LN_CONFIG_TCP_SENDPAGE],
+[AC_MSG_CHECKING([if tcp_sendpage first parameter is socket])
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+LB_LINUX_TRY_COMPILE([
+        #include <linux/net.h>
+        #include <net/tcp.h>
+],[
+        tcp_sendpage((struct socket*)0, NULL, 0, 0, 0);
+],[
+        AC_MSG_RESULT(yes)
+        AC_DEFINE(HAVE_TCP_SENDPAGE_USE_SOCKET, 1,
+                  [tcp_sendpage use socket as first parameter])
+],[
+        AC_MSG_RESULT(no)
+])
+EXTRA_KCFLAGS="$tmp_flags"
+])
+
+#
 # LN_PROG_LINUX
 #
 # LNet linux kernel checks
@@ -584,6 +606,8 @@ LN_CONFIG_PTLLND
 LN_CONFIG_MX
 # 2.6.32
 LN_5ARGS_SYSCTL_PROC_HANDLER
+# 2.6.36
+LN_CONFIG_TCP_SENDPAGE
 ])
 
 #
index 10c5002..3d917df 100644 (file)
 #if defined (__KERNEL__)
 #include <linux/uio.h>
 #include <linux/types.h>
+
+#ifdef HAVE_TCP_SENDPAGE_USE_SOCKET
+#define cfs_tcp_sendpage(sk, page, offset, size, flags) \
+        tcp_sendpage((sk)->sk_socket, page, offset, size, flags)
+#else
+#define cfs_tcp_sendpage(sk, page, offset, size, flags) \
+        tcp_sendpage(sk, page, offset, size, flags)
+#endif
 #else
 #include <sys/types.h>
 #include <sys/uio.h>
index 6907ab2..f2bd932 100644 (file)
@@ -601,7 +601,8 @@ ksocknal_lib_send_kiov (ksock_conn_t *conn, ksock_tx_t *tx)
                         rc = sk->sk_prot->sendpage(sk, page,
                                                    offset, fragsize, msgflg);
                 } else {
-                        rc = tcp_sendpage(sock, page, offset, fragsize, msgflg);
+                        rc = cfs_tcp_sendpage(sk, page, offset, fragsize,
+                                              msgflg);
                 }
         } else {
 #if SOCKNAL_SINGLE_FRAG_TX || !SOCKNAL_RISK_KMAP_DEADLOCK