Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 170703
b: refs/heads/master
c: 766e903
h: refs/heads/master
i:
  170701: 4878cac
  170699: 55c2d65
  170695: 27f3d42
  170687: d898294
v: v3
  • Loading branch information
Eric Dumazet authored and David S. Miller committed Oct 15, 2009
1 parent 9ee0461 commit 0e340f4
Show file tree
Hide file tree
Showing 10 changed files with 21 additions and 35 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 48bccd25df71f4f8177cb800f4b288222eb57761
refs/heads/master: 766e9037cc139ee25ed93ee5ad11e1450c4b99f6
15 changes: 7 additions & 8 deletions trunk/net/core/sock.c
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ static void sock_disable_timestamp(struct sock *sk, int flag)

int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
{
int err = 0;
int err;
int skb_len;
unsigned long flags;
struct sk_buff_head *list = &sk->sk_receive_queue;
Expand All @@ -284,17 +284,17 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
*/
if (atomic_read(&sk->sk_rmem_alloc) + skb->truesize >=
(unsigned)sk->sk_rcvbuf) {
err = -ENOMEM;
goto out;
atomic_inc(&sk->sk_drops);
return -ENOMEM;
}

err = sk_filter(sk, skb);
if (err)
goto out;
return err;

if (!sk_rmem_schedule(sk, skb->truesize)) {
err = -ENOBUFS;
goto out;
atomic_inc(&sk->sk_drops);
return -ENOBUFS;
}

skb->dev = NULL;
Expand All @@ -314,8 +314,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)

if (!sock_flag(sk, SOCK_DEAD))
sk->sk_data_ready(sk, skb_len);
out:
return err;
return 0;
}
EXPORT_SYMBOL(sock_queue_rcv_skb);

Expand Down
1 change: 0 additions & 1 deletion trunk/net/ieee802154/dgram.c
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,6 @@ static int dgram_recvmsg(struct kiocb *iocb, struct sock *sk,
static int dgram_rcv_skb(struct sock *sk, struct sk_buff *skb)
{
if (sock_queue_rcv_skb(sk, skb) < 0) {
atomic_inc(&sk->sk_drops);
kfree_skb(skb);
return NET_RX_DROP;
}
Expand Down
1 change: 0 additions & 1 deletion trunk/net/ieee802154/raw.c
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,6 @@ static int raw_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
static int raw_rcv_skb(struct sock *sk, struct sk_buff *skb)
{
if (sock_queue_rcv_skb(sk, skb) < 0) {
atomic_inc(&sk->sk_drops);
kfree_skb(skb);
return NET_RX_DROP;
}
Expand Down
1 change: 0 additions & 1 deletion trunk/net/ipv4/raw.c
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,6 @@ static int raw_rcv_skb(struct sock * sk, struct sk_buff * skb)
/* Charge it to the socket. */

if (sock_queue_rcv_skb(sk, skb) < 0) {
atomic_inc(&sk->sk_drops);
kfree_skb(skb);
return NET_RX_DROP;
}
Expand Down
19 changes: 8 additions & 11 deletions trunk/net/ipv4/udp.c
Original file line number Diff line number Diff line change
Expand Up @@ -1063,25 +1063,22 @@ EXPORT_SYMBOL(udp_lib_unhash);

static int __udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
{
int is_udplite = IS_UDPLITE(sk);
int rc;
int rc = sock_queue_rcv_skb(sk, skb);

if (rc < 0) {
int is_udplite = IS_UDPLITE(sk);

if ((rc = sock_queue_rcv_skb(sk, skb)) < 0) {
/* Note that an ENOMEM error is charged twice */
if (rc == -ENOMEM) {
if (rc == -ENOMEM)
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS,
is_udplite);
atomic_inc(&sk->sk_drops);
}
goto drop;
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite);
kfree_skb(skb);
return -1;
}

return 0;

drop:
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite);
kfree_skb(skb);
return -1;
}

/* returns:
Expand Down
3 changes: 1 addition & 2 deletions trunk/net/ipv6/raw.c
Original file line number Diff line number Diff line change
Expand Up @@ -381,8 +381,7 @@ static inline int rawv6_rcv_skb(struct sock * sk, struct sk_buff * skb)
}

/* Charge it to the socket. */
if (sock_queue_rcv_skb(sk,skb)<0) {
atomic_inc(&sk->sk_drops);
if (sock_queue_rcv_skb(sk, skb) < 0) {
kfree_skb(skb);
return NET_RX_DROP;
}
Expand Down
6 changes: 2 additions & 4 deletions trunk/net/ipv6/udp.c
Original file line number Diff line number Diff line change
Expand Up @@ -385,13 +385,11 @@ int udpv6_queue_rcv_skb(struct sock * sk, struct sk_buff *skb)
goto drop;
}

if ((rc = sock_queue_rcv_skb(sk,skb)) < 0) {
if ((rc = sock_queue_rcv_skb(sk, skb)) < 0) {
/* Note that an ENOMEM error is charged twice */
if (rc == -ENOMEM) {
if (rc == -ENOMEM)
UDP6_INC_STATS_BH(sock_net(sk),
UDP_MIB_RCVBUFERRORS, is_udplite);
atomic_inc(&sk->sk_drops);
}
goto drop;
}

Expand Down
6 changes: 2 additions & 4 deletions trunk/net/phonet/datagram.c
Original file line number Diff line number Diff line change
Expand Up @@ -159,11 +159,9 @@ static int pn_recvmsg(struct kiocb *iocb, struct sock *sk,
static int pn_backlog_rcv(struct sock *sk, struct sk_buff *skb)
{
int err = sock_queue_rcv_skb(sk, skb);
if (err < 0) {

if (err < 0)
kfree_skb(skb);
if (err == -ENOMEM)
atomic_inc(&sk->sk_drops);
}
return err ? NET_RX_DROP : NET_RX_SUCCESS;
}

Expand Down
2 changes: 0 additions & 2 deletions trunk/net/phonet/pep.c
Original file line number Diff line number Diff line change
Expand Up @@ -360,8 +360,6 @@ static int pipe_do_rcv(struct sock *sk, struct sk_buff *skb)
err = sock_queue_rcv_skb(sk, skb);
if (!err)
return 0;
if (err == -ENOMEM)
atomic_inc(&sk->sk_drops);
break;
}

Expand Down

0 comments on commit 0e340f4

Please sign in to comment.