···421421 dprintk("svc: socket %p(inet %p), busy=%d\n",422422 svsk, sk,423423 test_bit(XPT_BUSY, &svsk->sk_xprt.xpt_flags));424424+425425+ /* Refer to svc_setup_socket() for details. */426426+ rmb();424427 svsk->sk_odata(sk);425428 if (!test_and_set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags))426429 svc_xprt_enqueue(&svsk->sk_xprt);···440437 if (svsk) {441438 dprintk("svc: socket %p(inet %p), write_space busy=%d\n",442439 svsk, sk, test_bit(XPT_BUSY, &svsk->sk_xprt.xpt_flags));440440+441441+ /* Refer to svc_setup_socket() for details. */442442+ rmb();443443 svsk->sk_owspace(sk);444444 svc_xprt_enqueue(&svsk->sk_xprt);445445 }···766760 dprintk("svc: socket %p TCP (listen) state change %d\n",767761 sk, sk->sk_state);768762769769- if (svsk)763763+ if (svsk) {764764+ /* Refer to svc_setup_socket() for details. */765765+ rmb();770766 svsk->sk_odata(sk);767767+ }768768+771769 /*772770 * This callback may called twice when a new connection773771 * is established as a child socket inherits everything···804794 if (!svsk)805795 printk("svc: socket %p: no user data\n", sk);806796 else {797797+ /* Refer to svc_setup_socket() for details. */798798+ rmb();807799 svsk->sk_ostate(sk);808800 if (sk->sk_state != TCP_ESTABLISHED) {809801 set_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags);···13931381 return ERR_PTR(err);13941382 }1395138313961396- inet->sk_user_data = svsk;13971384 svsk->sk_sock = sock;13981385 svsk->sk_sk = inet;13991386 svsk->sk_ostate = inet->sk_state_change;14001387 svsk->sk_odata = inet->sk_data_ready;14011388 svsk->sk_owspace = inet->sk_write_space;13891389+ /*13901390+ * This barrier is necessary in order to prevent race condition13911391+ * with svc_data_ready(), svc_listen_data_ready() and others13921392+ * when calling callbacks above.13931393+ */13941394+ wmb();13951395+ inet->sk_user_data = svsk;1402139614031397 /* Initialize the socket */14041398 if (sock->type == SOCK_DGRAM)