Phonet: account for dropped RX packets
Rémi Denis-Courmont [Tue, 21 Jul 2009 01:57:59 +0000 (01:57 +0000)]
Signed-off-by: Rémi Denis-Courmont <remi.denis-courmont@nokia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

net/phonet/pep.c

index eef833e..b8252d2 100644 (file)
@@ -346,8 +346,10 @@ static int pipe_do_rcv(struct sock *sk, struct sk_buff *skb)
                break;
 
        case PNS_PEP_CTRL_REQ:
-               if (skb_queue_len(&pn->ctrlreq_queue) >= PNPIPE_CTRLREQ_MAX)
+               if (skb_queue_len(&pn->ctrlreq_queue) >= PNPIPE_CTRLREQ_MAX) {
+                       atomic_inc(&sk->sk_drops);
                        break;
+               }
                __skb_pull(skb, 4);
                queue = &pn->ctrlreq_queue;
                goto queue;
@@ -358,10 +360,13 @@ 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;
                }
 
                if (pn->rx_credits == 0) {
+                       atomic_inc(&sk->sk_drops);
                        err = -ENOBUFS;
                        break;
                }