if (xprt != NULL) {
                struct sock_xprt *transport = container_of(xprt,
                                struct sock_xprt, xprt);
+               transport->old_data_ready(sk);
+               /* Any data means we had a useful conversation, so
+                * then we don't need to delay the next reconnect
+                */
+               if (xprt->reestablish_timeout)
+                       xprt->reestablish_timeout = 0;
                if (!test_and_set_bit(XPRT_SOCK_DATA_READY, &transport->sock_state))
                        queue_work(rpciod_workqueue, &transport->recv_worker);
        }
        xs_tcp_data_receive(transport);
 }
 
-/**
- * xs_tcp_data_ready - "data ready" callback for TCP sockets
- * @sk: socket with data to read
- *
- */
-static void xs_tcp_data_ready(struct sock *sk)
-{
-       struct sock_xprt *transport;
-       struct rpc_xprt *xprt;
-
-       dprintk("RPC:       xs_tcp_data_ready...\n");
-
-       read_lock_bh(&sk->sk_callback_lock);
-       if (!(xprt = xprt_from_sock(sk)))
-               goto out;
-       transport = container_of(xprt, struct sock_xprt, xprt);
-       if (test_and_set_bit(XPRT_SOCK_DATA_READY, &transport->sock_state))
-               goto out;
-
-       /* Any data means we had a useful conversation, so
-        * the we don't need to delay the next reconnect
-        */
-       if (xprt->reestablish_timeout)
-               xprt->reestablish_timeout = 0;
-       queue_work(rpciod_workqueue, &transport->recv_worker);
-
-out:
-       read_unlock_bh(&sk->sk_callback_lock);
-}
-
 /**
  * xs_tcp_state_change - callback to handle TCP socket state changes
  * @sk: socket whose state has changed
                xs_save_old_callbacks(transport, sk);
 
                sk->sk_user_data = xprt;
-               sk->sk_data_ready = xs_tcp_data_ready;
+               sk->sk_data_ready = xs_data_ready;
                sk->sk_state_change = xs_tcp_state_change;
                sk->sk_write_space = xs_tcp_write_space;
                sock_set_flag(sk, SOCK_FASYNC);