|
@@ -617,7 +617,7 @@ static int svc_udp_recvfrom(struct svc_rqst *rqstp)
|
|
svsk->sk_sk->sk_stamp = skb->tstamp;
|
|
svsk->sk_sk->sk_stamp = skb->tstamp;
|
|
set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); /* there may be more data... */
|
|
set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); /* there may be more data... */
|
|
|
|
|
|
- len = skb->len - sizeof(struct udphdr);
|
|
|
|
|
|
+ len = skb->len;
|
|
rqstp->rq_arg.len = len;
|
|
rqstp->rq_arg.len = len;
|
|
|
|
|
|
rqstp->rq_prot = IPPROTO_UDP;
|
|
rqstp->rq_prot = IPPROTO_UDP;
|
|
@@ -641,8 +641,7 @@ static int svc_udp_recvfrom(struct svc_rqst *rqstp)
|
|
skb_free_datagram_locked(svsk->sk_sk, skb);
|
|
skb_free_datagram_locked(svsk->sk_sk, skb);
|
|
} else {
|
|
} else {
|
|
/* we can use it in-place */
|
|
/* we can use it in-place */
|
|
- rqstp->rq_arg.head[0].iov_base = skb->data +
|
|
|
|
- sizeof(struct udphdr);
|
|
|
|
|
|
+ rqstp->rq_arg.head[0].iov_base = skb->data;
|
|
rqstp->rq_arg.head[0].iov_len = len;
|
|
rqstp->rq_arg.head[0].iov_len = len;
|
|
if (skb_checksum_complete(skb))
|
|
if (skb_checksum_complete(skb))
|
|
goto out_free;
|
|
goto out_free;
|