]> err.no Git - linux-2.6/blobdiff - net/sunrpc/xprt.c
Merge master.kernel.org:/pub/scm/linux/kernel/git/davej/agpgart
[linux-2.6] / net / sunrpc / xprt.c
index 940dba965bb90a157ad29587a44333e6160e636d..4dd5b3cfe7547071b945e47d9ba6ab6e5ef89647 100644 (file)
@@ -651,6 +651,8 @@ void xprt_complete_rqst(struct rpc_task *task, int copied)
        task->tk_rtt = (long)jiffies - req->rq_xtime;
 
        list_del_init(&req->rq_list);
+       /* Ensure all writes are done before we update req->rq_received */
+       smp_wmb();
        req->rq_received = req->rq_private_buf.len = copied;
        rpc_wake_up_task(task);
 }
@@ -727,7 +729,6 @@ void xprt_transmit(struct rpc_task *task)
 
        dprintk("RPC: %4d xprt_transmit(%u)\n", task->tk_pid, req->rq_slen);
 
-       smp_rmb();
        if (!req->rq_received) {
                if (list_empty(&req->rq_list)) {
                        spin_lock_bh(&xprt->transport_lock);