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

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
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -617,7 +617,7 @@ RXbBulkInProcessData (
                //Discard beacon packet which channel is 0
                if ( (WLAN_GET_FC_FSTYPE((pRxPacket->p80211Header->sA3.wFrameCtl)) == WLAN_FSTYPE_BEACON) ||
                     (WLAN_GET_FC_FSTYPE((pRxPacket->p80211Header->sA3.wFrameCtl)) == WLAN_FSTYPE_PROBERESP) ) {
                    return TRUE;
			return FALSE;
                }
            }
            pRxPacket->byRxChannel = (*pbyRxSts) >> 2;
@@ -912,7 +912,7 @@ RXbBulkInProcessData (
                     pDevice->skb->protocol = htons(ETH_P_802_2);
                     memset(pDevice->skb->cb, 0, sizeof(pDevice->skb->cb));
                     netif_rx(pDevice->skb);
                     pDevice->skb = dev_alloc_skb((int)pDevice->rx_buf_sz);
			return TRUE;
                 }

                return FALSE;
@@ -1534,6 +1534,11 @@ RXvFreeRCB(
    ASSERT(!pRCB->Ref);     // should be 0
    ASSERT(pRCB->pDevice);  // shouldn't be NULL

	if (bReAllocSkb == FALSE) {
		kfree_skb(pRCB->skb);
		bReAllocSkb = TRUE;
	}

    if (bReAllocSkb == TRUE) {
        pRCB->skb = dev_alloc_skb((int)pDevice->rx_buf_sz);
        // todo error handling