diff options
Diffstat (limited to 'drivers/net/wireless/b43')
| -rw-r--r-- | drivers/net/wireless/b43/leds.c | 3 | ||||
| -rw-r--r-- | drivers/net/wireless/b43/main.c | 12 |
2 files changed, 11 insertions, 4 deletions
diff --git a/drivers/net/wireless/b43/leds.c b/drivers/net/wireless/b43/leds.c index 36a9c42df835..76f4c7bad8b8 100644 --- a/drivers/net/wireless/b43/leds.c +++ b/drivers/net/wireless/b43/leds.c | |||
| @@ -72,6 +72,9 @@ static void b43_led_brightness_set(struct led_classdev *led_dev, | |||
| 72 | struct b43_wldev *dev = led->dev; | 72 | struct b43_wldev *dev = led->dev; |
| 73 | bool radio_enabled; | 73 | bool radio_enabled; |
| 74 | 74 | ||
| 75 | if (unlikely(b43_status(dev) < B43_STAT_INITIALIZED)) | ||
| 76 | return; | ||
| 77 | |||
| 75 | /* Checking the radio-enabled status here is slightly racy, | 78 | /* Checking the radio-enabled status here is slightly racy, |
| 76 | * but we want to avoid the locking overhead and we don't care | 79 | * but we want to avoid the locking overhead and we don't care |
| 77 | * whether the LED has the wrong state for a second. */ | 80 | * whether the LED has the wrong state for a second. */ |
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c index fa4b0d8b74a2..a70827793086 100644 --- a/drivers/net/wireless/b43/main.c +++ b/drivers/net/wireless/b43/main.c | |||
| @@ -2883,12 +2883,11 @@ static int b43_op_tx(struct ieee80211_hw *hw, | |||
| 2883 | 2883 | ||
| 2884 | if (unlikely(skb->len < 2 + 2 + 6)) { | 2884 | if (unlikely(skb->len < 2 + 2 + 6)) { |
| 2885 | /* Too short, this can't be a valid frame. */ | 2885 | /* Too short, this can't be a valid frame. */ |
| 2886 | dev_kfree_skb_any(skb); | 2886 | goto drop_packet; |
| 2887 | return NETDEV_TX_OK; | ||
| 2888 | } | 2887 | } |
| 2889 | B43_WARN_ON(skb_shinfo(skb)->nr_frags); | 2888 | B43_WARN_ON(skb_shinfo(skb)->nr_frags); |
| 2890 | if (unlikely(!dev)) | 2889 | if (unlikely(!dev)) |
| 2891 | return NETDEV_TX_BUSY; | 2890 | goto drop_packet; |
| 2892 | 2891 | ||
| 2893 | /* Transmissions on seperate queues can run concurrently. */ | 2892 | /* Transmissions on seperate queues can run concurrently. */ |
| 2894 | read_lock_irqsave(&wl->tx_lock, flags); | 2893 | read_lock_irqsave(&wl->tx_lock, flags); |
| @@ -2904,7 +2903,12 @@ static int b43_op_tx(struct ieee80211_hw *hw, | |||
| 2904 | read_unlock_irqrestore(&wl->tx_lock, flags); | 2903 | read_unlock_irqrestore(&wl->tx_lock, flags); |
| 2905 | 2904 | ||
| 2906 | if (unlikely(err)) | 2905 | if (unlikely(err)) |
| 2907 | return NETDEV_TX_BUSY; | 2906 | goto drop_packet; |
| 2907 | return NETDEV_TX_OK; | ||
| 2908 | |||
| 2909 | drop_packet: | ||
| 2910 | /* We can not transmit this packet. Drop it. */ | ||
| 2911 | dev_kfree_skb_any(skb); | ||
| 2908 | return NETDEV_TX_OK; | 2912 | return NETDEV_TX_OK; |
| 2909 | } | 2913 | } |
| 2910 | 2914 | ||
