ibmvnic: account for bufs already saved in indir_buf
This fixes a crash in replenish_rx_pool() when called from ibmvnic_poll() after a previous call to replenish_rx_pool() encountered an error when allocating a socket buffer. Thanks to Rick Lindsley and Dany Madden for helping debug the crash. Fixes: 4f0b6812e9b9 ("ibmvnic: Introduce batched RX buffer descriptor transmission") Signed-off-by: Sukadev Bhattiprolu <sukadev@linux.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
65d6470d13
commit
72368f8b2b
@ -328,7 +328,14 @@ static void replenish_rx_pool(struct ibmvnic_adapter *adapter,
|
||||
|
||||
rx_scrq = adapter->rx_scrq[pool->index];
|
||||
ind_bufp = &rx_scrq->ind_buf;
|
||||
for (i = 0; i < count; ++i) {
|
||||
|
||||
/* netdev_skb_alloc() could have failed after we saved a few skbs
|
||||
* in the indir_buf and we would not have sent them to VIOS yet.
|
||||
* To account for them, start the loop at ind_bufp->index rather
|
||||
* than 0. If we pushed all the skbs to VIOS, ind_bufp->index will
|
||||
* be 0.
|
||||
*/
|
||||
for (i = ind_bufp->index; i < count; ++i) {
|
||||
skb = netdev_alloc_skb(adapter->netdev, pool->buff_size);
|
||||
if (!skb) {
|
||||
dev_err(dev, "Couldn't replenish rx buff\n");
|
||||
|
Loading…
x
Reference in New Issue
Block a user