be2net: Fix race in posting rx buffers.
Sathya Perla [Mon, 22 Aug 2011 19:41:51 +0000 (19:41 +0000)]
There is a possibility of be_post_rx_frags() being called simultaneously from
both be_worker() (when rx_post_starved) and be_poll_rx() (when rxq->used is 0).
This can be avoided by posting rx buffers only when some completions have been
reaped.

Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

drivers/net/ethernet/emulex/benet/be_main.c

index ef62594..09eb699 100644 (file)
@@ -1862,7 +1862,7 @@ loop_continue:
        }
 
        /* Refill the queue */
-       if (atomic_read(&rxo->q.used) < RX_FRAGS_REFILL_WM)
+       if (work_done && atomic_read(&rxo->q.used) < RX_FRAGS_REFILL_WM)
                be_post_rx_frags(rxo, GFP_ATOMIC);
 
        /* All consumed */