]) # LN_CONFIG_TCP_SENDPAGE
#
+# LN_CONFIG_SK_DATA_READY
+#
+# 2.6.36 tcp_sendpage() first parameter is 'struct sock' instead of 'struct socket'.
+#
+AC_DEFUN([LN_CONFIG_SK_DATA_READY], [
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+LB_CHECK_COMPILE([if 'sk_data_ready' takes only one argument],
+sk_data_ready, [
+ #include <linux/net.h>
+ #include <net/sock.h>
+],[
+ ((struct sock *)0)->sk_data_ready(NULL);
+],[
+ AC_DEFINE(HAVE_SK_DATA_READY_ONE_ARG, 1,
+ [sk_data_ready uses only one argument])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+]) # LN_CONFIG_SK_DATA_READY
+
+#
# LN_PROG_LINUX
#
# LNet linux kernel checks
LN_CONFIG_MX
# 2.6.36
LN_CONFIG_TCP_SENDPAGE
+# 3.15
+LN_CONFIG_SK_DATA_READY
]) # LN_PROG_LINUX
#
* socket call back in Linux
*/
static void
-ksocknal_data_ready (struct sock *sk, int n)
+#ifdef HAVE_SK_DATA_READY_ONE_ARG
+ksocknal_data_ready(struct sock *sk)
+#else
+ksocknal_data_ready(struct sock *sk, int n)
+#endif
{
- ksock_conn_t *conn;
- ENTRY;
+ ksock_conn_t *conn;
+ ENTRY;
/* interleave correctly with closing sockets... */
LASSERT(!in_irq());
read_lock(&ksocknal_data.ksnd_global_lock);
- conn = sk->sk_user_data;
- if (conn == NULL) { /* raced with ksocknal_terminate_conn */
- LASSERT (sk->sk_data_ready != &ksocknal_data_ready);
- sk->sk_data_ready (sk, n);
- } else
- ksocknal_read_callback(conn);
+ conn = sk->sk_user_data;
+ if (conn == NULL) { /* raced with ksocknal_terminate_conn */
+ LASSERT(sk->sk_data_ready != &ksocknal_data_ready);
+#ifdef HAVE_SK_DATA_READY_ONE_ARG
+ sk->sk_data_ready(sk);
+#else
+ sk->sk_data_ready(sk, n);
+#endif
+ } else
+ ksocknal_read_callback(conn);
read_unlock(&ksocknal_data.ksnd_global_lock);
- EXIT;
+ EXIT;
}
static void