From: yangsheng Date: Thu, 8 Dec 2011 00:10:20 +0000 (+0800) Subject: LU-506 kernel: FC15 - tcp_sendpage() uses struct sock. X-Git-Tag: 2.1.53~47 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=ed6b8ecb64bb1117ddc0865647f19a891d6cfd5c LU-506 kernel: FC15 - tcp_sendpage() uses struct sock. Since 2.6.36 tcp_sendpage() uses 'struct sock' as 1st argument instead of 'struct socket'. Change-Id: I1641541e3e52f3f47c2dfeb63a5311f5f9a0634a Signed-off-by: Yang Sheng Reviewed-on: http://review.whamcloud.com/1739 Tested-by: Hudson Tested-by: Maloo Reviewed-by: Oleg Drokin --- diff --git a/lnet/autoconf/lustre-lnet.m4 b/lnet/autoconf/lustre-lnet.m4 index 1a070ac..6ed99bf 100644 --- a/lnet/autoconf/lustre-lnet.m4 +++ b/lnet/autoconf/lustre-lnet.m4 @@ -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 + #include ],[ 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 + #include +],[ + 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 ]) # diff --git a/lnet/include/lnet/linux/lnet.h b/lnet/include/lnet/linux/lnet.h index 10c5002..3d917df 100644 --- a/lnet/include/lnet/linux/lnet.h +++ b/lnet/include/lnet/linux/lnet.h @@ -50,6 +50,14 @@ #if defined (__KERNEL__) #include #include + +#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 #include diff --git a/lnet/klnds/socklnd/socklnd_lib-linux.c b/lnet/klnds/socklnd/socklnd_lib-linux.c index 6907ab2..f2bd932 100644 --- a/lnet/klnds/socklnd/socklnd_lib-linux.c +++ b/lnet/klnds/socklnd/socklnd_lib-linux.c @@ -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