ipw2200: fix netif_*_queue() removal regression

In "ipw2200: Call netif_*_queue() interfaces properly", netif_stop_queue()
and netif_wake_queue() were removed with the reason
"netif_carrier_{on,off}() handles starting and stopping packet flow into
the driver". The patch also removes a valid condition check that
ipw_tx_skb() cannot be called if device is not in STATUS_ASSOCIATED state.
But netif_carrier_off() doesn't guarantee netdev->hard_start_xmit won't
be called because linkwatch event is handled in a delayed workqueue. This
caused a kernel oops reported by Frank Seidel:
https://bugzilla.novell.com/show_bug.cgi?id=397390

This patch fixes the problem by moving the STATUS_ASSOCIATED check back
to ipw_tx_skb(). It also adds a missing netif_carrier_off() call to
ipw_disassociate().

Signed-off-by: Zhu Yi <yi.zhu@intel.com>
Signed-off-by: Chatre, Reinette <reinette.chatre@intel.com>
Tested-by: Frank Seidel <fseidel@suse.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

authored by Zhu Yi and committed by John W. Linville b8ddafd7 40a9a829

+4
+4
drivers/net/wireless/ipw2200.c
··· 3897 3897 if (!(priv->status & (STATUS_ASSOCIATED | STATUS_ASSOCIATING))) 3898 3898 return 0; 3899 3899 ipw_send_disassociate(data, 0); 3900 + netif_carrier_off(priv->net_dev); 3900 3901 return 1; 3901 3902 } 3902 3903 ··· 10190 10189 u8 id, hdr_len, unicast; 10191 10190 u16 remaining_bytes; 10192 10191 int fc; 10192 + 10193 + if (!(priv->status & STATUS_ASSOCIATED)) 10194 + goto drop; 10193 10195 10194 10196 hdr_len = ieee80211_get_hdrlen(le16_to_cpu(hdr->frame_ctl)); 10195 10197 switch (priv->ieee->iw_mode) {