diff options
Diffstat (limited to 'net/ipv4/udp.c')
| -rw-r--r-- | net/ipv4/udp.c | 7 | 
1 files changed, 5 insertions, 2 deletions
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 5944d7d668dd..44f6a20fa29d 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -999,7 +999,7 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,  			err = PTR_ERR(rt);  			rt = NULL;  			if (err == -ENETUNREACH) -				IP_INC_STATS_BH(net, IPSTATS_MIB_OUTNOROUTES); +				IP_INC_STATS(net, IPSTATS_MIB_OUTNOROUTES);  			goto out;  		} @@ -1098,6 +1098,9 @@ int udp_sendpage(struct sock *sk, struct page *page, int offset,  	struct udp_sock *up = udp_sk(sk);  	int ret; +	if (flags & MSG_SENDPAGE_NOTLAST) +		flags |= MSG_MORE; +  	if (!up->pending) {  		struct msghdr msg = {	.msg_flags = flags|MSG_MORE }; @@ -1236,7 +1239,7 @@ int udp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,  	bool slow;  	if (flags & MSG_ERRQUEUE) -		return ip_recv_error(sk, msg, len); +		return ip_recv_error(sk, msg, len, addr_len);  try_again:  	skb = __skb_recv_datagram(sk, flags | (noblock ? MSG_DONTWAIT : 0),  | 
