mirror of https://gitee.com/openkylin/linux.git
rtl818x: Remove SKB list assumptions.
Eliminate the assumption that SKBs and SKB list heads can be cast to eachother in SKB list handling code. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
6effee6840
commit
8b9db0d0aa
|
@ -499,7 +499,7 @@ static void rtl8187b_status_cb(struct urb *urb)
|
||||||
if (cmd_type == 1) {
|
if (cmd_type == 1) {
|
||||||
unsigned int pkt_rc, seq_no;
|
unsigned int pkt_rc, seq_no;
|
||||||
bool tok;
|
bool tok;
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb, *iter;
|
||||||
struct ieee80211_hdr *ieee80211hdr;
|
struct ieee80211_hdr *ieee80211hdr;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
|
@ -508,8 +508,9 @@ static void rtl8187b_status_cb(struct urb *urb)
|
||||||
seq_no = (val >> 16) & 0xFFF;
|
seq_no = (val >> 16) & 0xFFF;
|
||||||
|
|
||||||
spin_lock_irqsave(&priv->b_tx_status.queue.lock, flags);
|
spin_lock_irqsave(&priv->b_tx_status.queue.lock, flags);
|
||||||
skb_queue_reverse_walk(&priv->b_tx_status.queue, skb) {
|
skb = NULL;
|
||||||
ieee80211hdr = (struct ieee80211_hdr *)skb->data;
|
skb_queue_reverse_walk(&priv->b_tx_status.queue, iter) {
|
||||||
|
ieee80211hdr = (struct ieee80211_hdr *)iter->data;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* While testing, it was discovered that the seq_no
|
* While testing, it was discovered that the seq_no
|
||||||
|
@ -522,10 +523,12 @@ static void rtl8187b_status_cb(struct urb *urb)
|
||||||
* it's unlikely we wrongly ack some sent data
|
* it's unlikely we wrongly ack some sent data
|
||||||
*/
|
*/
|
||||||
if ((le16_to_cpu(ieee80211hdr->seq_ctrl)
|
if ((le16_to_cpu(ieee80211hdr->seq_ctrl)
|
||||||
& 0xFFF) == seq_no)
|
& 0xFFF) == seq_no) {
|
||||||
|
skb = iter;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (skb != (struct sk_buff *) &priv->b_tx_status.queue) {
|
if (skb) {
|
||||||
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
|
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
|
||||||
|
|
||||||
__skb_unlink(skb, &priv->b_tx_status.queue);
|
__skb_unlink(skb, &priv->b_tx_status.queue);
|
||||||
|
|
Loading…
Reference in New Issue