brcmfmac: stop dequeue upon sk_buff commit failure
authorArend van Spriel <arend@broadcom.com>
Wed, 17 Apr 2013 19:25:58 +0000 (21:25 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 22 Apr 2013 19:20:24 +0000 (15:20 -0400)
In the dequeue worker the function brcmf_commit_skb() is called.
However, instead of increment the credit count upon success it
should break the for loop upon failure. Otherwise, it will result
in an endless loop.

Reviewed-by: Hante Meuleman <meuleman@broadcom.com>
Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
Signed-off-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c

index 25eaa1305db2c51842ffab397f9b8e680d2899ed..8ae7da8bf688e9954eac4df1036623699bbbf01a 100644 (file)
@@ -1850,10 +1850,9 @@ static void brcmf_fws_dequeue_worker(struct work_struct *worker)
                          fws->fifo_credit[fifo]);
                for (credit = 0; credit < fws->fifo_credit[fifo]; /* nop */) {
                        skb = brcmf_fws_deq(fws, fifo);
-                       if (!skb)
+                       if (!skb || brcmf_fws_commit_skb(fws, fifo, skb))
                                break;
-                       if (!brcmf_fws_commit_skb(fws, fifo, skb) &&
-                           brcmf_skbcb(skb)->if_flags &
+                       if (brcmf_skbcb(skb)->if_flags &
                            BRCMF_SKB_IF_FLAGS_CREDITCHECK_MASK)
                                credit++;
                }