Patch from Trond Myklebust <trond.myklebust@fys.uio.no>

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 */

_