summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorSathya Perla <sathya.perla@emulex.com>2011-08-22 21:41:51 +0200
committerDavid S. Miller <davem@davemloft.net>2011-08-25 01:19:28 +0200
commit857c99059e441d0a8afdfa0bc687463e8e61a761 (patch)
treee625a4b0527c32cdbd22d9eb905be80149c8b085 /drivers
parentrps: support IPIP encapsulation (diff)
downloadlinux-857c99059e441d0a8afdfa0bc687463e8e61a761.tar.xz
linux-857c99059e441d0a8afdfa0bc687463e8e61a761.zip
be2net: Fix race in posting rx buffers.
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>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/ethernet/emulex/benet/be_main.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index ef62594a19cd..09eb6998e4d8 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -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 */