Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

qlge: bugfix: Add missing rx buf clean index on early exit.

The large receive buffer queue is not properly tracking the current
index in the case where an early exit occurs. This can happen when a
page alloc or dma mapping fails. If this occurs the queue will get
out of sync and invalid indexes can be written to the hardware.

Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Ron Mercer and committed by
David S. Miller
79d2b29e def48b6e

+2
+2
drivers/net/qlge/qlge_main.c
··· 898 898 lbq_desc->index); 899 899 lbq_desc->p.lbq_page = alloc_page(GFP_ATOMIC); 900 900 if (lbq_desc->p.lbq_page == NULL) { 901 + rx_ring->lbq_clean_idx = clean_idx; 901 902 QPRINTK(qdev, RX_STATUS, ERR, 902 903 "Couldn't get a page.\n"); 903 904 return; ··· 908 907 0, PAGE_SIZE, 909 908 PCI_DMA_FROMDEVICE); 910 909 if (pci_dma_mapping_error(qdev->pdev, map)) { 910 + rx_ring->lbq_clean_idx = clean_idx; 911 911 put_page(lbq_desc->p.lbq_page); 912 912 lbq_desc->p.lbq_page = NULL; 913 913 QPRINTK(qdev, RX_STATUS, ERR,