af_rxrpc: Remove incorrect checksum calculation from rxrpc_recvmsg()
authorTim Smith <tim@electronghost.co.uk>
Fri, 7 Feb 2014 18:58:43 +0000 (18:58 +0000)
committerDavid Howells <dhowells@redhat.com>
Fri, 7 Feb 2014 18:58:43 +0000 (18:58 +0000)
The UDP checksum was already verified in rxrpc_data_ready() - which calls
skb_checksum_complete() - as the RxRPC packet header contains no checksum of
its own.  Subsequent calls to skb_copy_and_csum_datagram_iovec() are thus
redundant and are, in any case, being passed only a subset of the UDP payload -
so the checksum will always fail if that path is taken.

So there is no need to check skb->ip_summed in rxrpc_recvmsg(), and no need for
the csum_copy_error: exit path.

Signed-off-by: Tim Smith <tim@electronghost.co.uk>
Signed-off-by: David Howells <dhowells@redhat.com>
net/rxrpc/ar-recvmsg.c

index 34b5490dde655ccdbac5dcbbc7b0df1b88ab42ca..e9aaa65c07784cf9991f5bef279e4dab49a6912f 100644 (file)
@@ -180,16 +180,7 @@ int rxrpc_recvmsg(struct kiocb *iocb, struct socket *sock,
                if (copy > len - copied)
                        copy = len - copied;
 
-               if (skb->ip_summed == CHECKSUM_UNNECESSARY ||
-                   skb->ip_summed == CHECKSUM_PARTIAL) {
-                       ret = skb_copy_datagram_iovec(skb, offset,
-                                                     msg->msg_iov, copy);
-               } else {
-                       ret = skb_copy_and_csum_datagram_iovec(skb, offset,
-                                                              msg->msg_iov);
-                       if (ret == -EINVAL)
-                               goto csum_copy_error;
-               }
+               ret = skb_copy_datagram_iovec(skb, offset, msg->msg_iov, copy);
 
                if (ret < 0)
                        goto copy_error;
@@ -348,20 +339,6 @@ copy_error:
        _leave(" = %d", ret);
        return ret;
 
-csum_copy_error:
-       _debug("csum error");
-       release_sock(&rx->sk);
-       if (continue_call)
-               rxrpc_put_call(continue_call);
-       rxrpc_kill_skb(skb);
-       if (!(flags & MSG_PEEK)) {
-               if (skb_dequeue(&rx->sk.sk_receive_queue) != skb)
-                       BUG();
-       }
-       skb_kill_datagram(&rx->sk, skb, flags);
-       rxrpc_put_call(call);
-       return -EAGAIN;
-
 wait_interrupted:
        ret = sock_intr_errno(timeo);
 wait_error: