SUNRPC: eliminate rpc_call()
[powerpc.git] / net / sunrpc / svcsock.c
index 691dea4..5058062 100644 (file)
@@ -548,9 +548,6 @@ svc_write_space(struct sock *sk)
 /*
  * Receive a datagram from a UDP socket.
  */
-extern int
-csum_partial_copy_to_xdr(struct xdr_buf *xdr, struct sk_buff *skb);
-
 static int
 svc_udp_recvfrom(struct svc_rqst *rqstp)
 {
@@ -626,12 +623,9 @@ svc_udp_recvfrom(struct svc_rqst *rqstp)
                /* we can use it in-place */
                rqstp->rq_arg.head[0].iov_base = skb->data + sizeof(struct udphdr);
                rqstp->rq_arg.head[0].iov_len = len;
-               if (skb->ip_summed != CHECKSUM_UNNECESSARY) {
-                       if ((unsigned short)csum_fold(skb_checksum(skb, 0, skb->len, skb->csum))) {
-                               skb_free_datagram(svsk->sk_sk, skb);
-                               return 0;
-                       }
-                       skb->ip_summed = CHECKSUM_UNNECESSARY;
+               if (skb_checksum_complete(skb)) {
+                       skb_free_datagram(svsk->sk_sk, skb);
+                       return 0;
                }
                rqstp->rq_skbuff = skb;
        }
@@ -764,7 +758,7 @@ svc_tcp_accept(struct svc_sock *svsk)
        struct svc_serv *serv = svsk->sk_server;
        struct socket   *sock = svsk->sk_sock;
        struct socket   *newsock;
-       struct proto_ops *ops;
+       const struct proto_ops *ops;
        struct svc_sock *newsvsk;
        int             err, slen;
 
@@ -1032,7 +1026,7 @@ svc_tcp_recvfrom(struct svc_rqst *rqstp)
        } else {
                printk(KERN_NOTICE "%s: recvfrom returned errno %d\n",
                                        svsk->sk_server->sv_name, -len);
-               svc_sock_received(svsk);
+               goto err_delete;
        }
 
        return len;
@@ -1184,6 +1178,7 @@ svc_recv(struct svc_serv *serv, struct svc_rqst *rqstp, long timeout)
        arg->tail[0].iov_len = 0;
 
        try_to_freeze();
+       cond_resched();
        if (signalled())
                return -EINTR;
 
@@ -1532,6 +1527,7 @@ svc_defer(struct cache_req *req)
                dr->handle.owner = rqstp->rq_server;
                dr->prot = rqstp->rq_prot;
                dr->addr = rqstp->rq_addr;
+               dr->daddr = rqstp->rq_daddr;
                dr->argslen = rqstp->rq_arg.len >> 2;
                memcpy(dr->args, rqstp->rq_arg.head[0].iov_base-skip, dr->argslen<<2);
        }
@@ -1557,6 +1553,7 @@ static int svc_deferred_recv(struct svc_rqst *rqstp)
        rqstp->rq_arg.len = dr->argslen<<2;
        rqstp->rq_prot        = dr->prot;
        rqstp->rq_addr        = dr->addr;
+       rqstp->rq_daddr       = dr->daddr;
        return dr->argslen<<2;
 }