Commit 28044e01 authored by Malcolm Priestley's avatar Malcolm Priestley Committed by Greg Kroah-Hartman

staging: vt6656: free skbuff and relocate on bReAllocSkb == FALSE.

bReAllocSkb == FALSE is when data is not fed to user land.

Free and relocate skbuff.

Where data is not sent return = FALSE from RXbBulkInProcessData.

This appears to reduce false errors when a reused skbuff has old data.
Signed-off-by: default avatarMalcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 87c62985
...@@ -617,7 +617,7 @@ RXbBulkInProcessData ( ...@@ -617,7 +617,7 @@ RXbBulkInProcessData (
//Discard beacon packet which channel is 0 //Discard beacon packet which channel is 0
if ( (WLAN_GET_FC_FSTYPE((pRxPacket->p80211Header->sA3.wFrameCtl)) == WLAN_FSTYPE_BEACON) || if ( (WLAN_GET_FC_FSTYPE((pRxPacket->p80211Header->sA3.wFrameCtl)) == WLAN_FSTYPE_BEACON) ||
(WLAN_GET_FC_FSTYPE((pRxPacket->p80211Header->sA3.wFrameCtl)) == WLAN_FSTYPE_PROBERESP) ) { (WLAN_GET_FC_FSTYPE((pRxPacket->p80211Header->sA3.wFrameCtl)) == WLAN_FSTYPE_PROBERESP) ) {
return TRUE; return FALSE;
} }
} }
pRxPacket->byRxChannel = (*pbyRxSts) >> 2; pRxPacket->byRxChannel = (*pbyRxSts) >> 2;
...@@ -912,7 +912,7 @@ RXbBulkInProcessData ( ...@@ -912,7 +912,7 @@ RXbBulkInProcessData (
pDevice->skb->protocol = htons(ETH_P_802_2); pDevice->skb->protocol = htons(ETH_P_802_2);
memset(pDevice->skb->cb, 0, sizeof(pDevice->skb->cb)); memset(pDevice->skb->cb, 0, sizeof(pDevice->skb->cb));
netif_rx(pDevice->skb); netif_rx(pDevice->skb);
pDevice->skb = dev_alloc_skb((int)pDevice->rx_buf_sz); return TRUE;
} }
return FALSE; return FALSE;
...@@ -1534,6 +1534,11 @@ RXvFreeRCB( ...@@ -1534,6 +1534,11 @@ RXvFreeRCB(
ASSERT(!pRCB->Ref); // should be 0 ASSERT(!pRCB->Ref); // should be 0
ASSERT(pRCB->pDevice); // shouldn't be NULL ASSERT(pRCB->pDevice); // shouldn't be NULL
if (bReAllocSkb == FALSE) {
kfree_skb(pRCB->skb);
bReAllocSkb = TRUE;
}
if (bReAllocSkb == TRUE) { if (bReAllocSkb == TRUE) {
pRCB->skb = dev_alloc_skb((int)pDevice->rx_buf_sz); pRCB->skb = dev_alloc_skb((int)pDevice->rx_buf_sz);
// todo error handling // todo error handling
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment