Patch from Trond Myklebust knfsd needs to disable soft interrupts when calling csum_partial_copy_to_xdr(). At the moment there's a nasty conflict between the RPC server and client. The problem arises when you get to xdr_partial_copy_from_skb() (and the kmap_atomic()); the RPC client can end up calling the same function from a ->data_ready() soft interrupt, and corrupt any data the knfsd process may have copied. sunrpc/svcsock.c | 3 +++ 1 files changed, 3 insertions(+) diff -puN net/sunrpc/svcsock.c~nfsd-disable-softirq net/sunrpc/svcsock.c --- 25/net/sunrpc/svcsock.c~nfsd-disable-softirq 2003-02-17 12:31:58.000000000 -0800 +++ 25-akpm/net/sunrpc/svcsock.c 2003-02-17 12:31:58.000000000 -0800 @@ -577,12 +577,15 @@ svc_udp_recvfrom(struct svc_rqst *rqstp) if (skb_is_nonlinear(skb)) { /* we have to copy */ + local_bh_disable(); if (csum_partial_copy_to_xdr(&rqstp->rq_arg, skb)) { + local_bh_enable(); /* checksum error */ skb_free_datagram(svsk->sk_sk, skb); svc_sock_received(svsk); return 0; } + local_bh_enable(); skb_free_datagram(svsk->sk_sk, skb); } else { /* we can use it in-place */ _