be2net: Handle error completion in Lancer
authorPadmanabh Ratnakar <padmanabh.ratnakar@emulex.com>
Tue, 10 May 2011 05:12:17 +0000 (05:12 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 11 May 2011 23:10:02 +0000 (19:10 -0400)
In Lancer if a frame is DMAed partially due to lack of RX buffers,
an error completion is sent with packet size as zero and num_recvd
indicating number of used buffers. These buffers need to be freed
and packet dropped.

Signed-off-by: Padmanabh Ratnakar <padmanabh.ratnakar@emulex.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/benet/be_main.c

index 3fb4a1f465e1a2190eb01b850c6b435e09397014..3202f67d8785ddc8ea299766ab8a528e3fe202bd 100644 (file)
@@ -1757,12 +1757,15 @@ static int be_poll_rx(struct napi_struct *napi, int budget)
                        break;
 
                /* Ignore flush completions */
-               if (rxcp->num_rcvd) {
+               if (rxcp->num_rcvd && rxcp->pkt_size) {
                        if (do_gro(rxcp))
                                be_rx_compl_process_gro(adapter, rxo, rxcp);
                        else
                                be_rx_compl_process(adapter, rxo, rxcp);
+               } else if (rxcp->pkt_size == 0) {
+                       be_rx_compl_discard(adapter, rxo, rxcp);
                }
+
                be_rx_stats_update(rxo, rxcp);
        }