aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2008-05-15 03:34:44 -0400
committerDavid S. Miller <davem@davemloft.net>2008-05-15 03:34:44 -0400
commit63fe46da9c380b3f2bbdf3765044649517cc717c (patch)
tree9478c1aca1d692b408955aea20c9cd9a37e589c0 /net/mac80211
parent99dd1a2b8347ac2ae802300b7862f6f7bcf17139 (diff)
parent066b2118976e6e7cc50eed39e2747c75343a23c4 (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: drivers/net/wireless/iwlwifi/iwl-4965-rs.c drivers/net/wireless/rt2x00/rt61pci.c
Diffstat (limited to 'net/mac80211')
-rw-r--r--net/mac80211/debugfs_key.c15
-rw-r--r--net/mac80211/iface.c9
-rw-r--r--net/mac80211/main.c7
-rw-r--r--net/mac80211/mesh.c2
-rw-r--r--net/mac80211/mesh_hwmp.c2
-rw-r--r--net/mac80211/mesh_pathtbl.c17
-rw-r--r--net/mac80211/mlme.c64
-rw-r--r--net/mac80211/rc80211_pid_debugfs.c4
-rw-r--r--net/mac80211/rx.c12
-rw-r--r--net/mac80211/tx.c5
-rw-r--r--net/mac80211/util.c10
-rw-r--r--net/mac80211/wme.c3
12 files changed, 108 insertions, 42 deletions
diff --git a/net/mac80211/debugfs_key.c b/net/mac80211/debugfs_key.c
index 879e7210458a..19efc3a6a932 100644
--- a/net/mac80211/debugfs_key.c
+++ b/net/mac80211/debugfs_key.c
@@ -255,14 +255,23 @@ void ieee80211_debugfs_key_remove(struct ieee80211_key *key)
255void ieee80211_debugfs_key_add_default(struct ieee80211_sub_if_data *sdata) 255void ieee80211_debugfs_key_add_default(struct ieee80211_sub_if_data *sdata)
256{ 256{
257 char buf[50]; 257 char buf[50];
258 struct ieee80211_key *key;
258 259
259 if (!sdata->debugfsdir) 260 if (!sdata->debugfsdir)
260 return; 261 return;
261 262
262 sprintf(buf, "../keys/%d", sdata->default_key->debugfs.cnt); 263 /* this is running under the key lock */
263 sdata->debugfs.default_key = 264
264 debugfs_create_symlink("default_key", sdata->debugfsdir, buf); 265 key = sdata->default_key;
266 if (key) {
267 sprintf(buf, "../keys/%d", key->debugfs.cnt);
268 sdata->debugfs.default_key =
269 debugfs_create_symlink("default_key",
270 sdata->debugfsdir, buf);
271 } else
272 ieee80211_debugfs_key_remove_default(sdata);
265} 273}
274
266void ieee80211_debugfs_key_remove_default(struct ieee80211_sub_if_data *sdata) 275void ieee80211_debugfs_key_remove_default(struct ieee80211_sub_if_data *sdata)
267{ 276{
268 if (!sdata) 277 if (!sdata)
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index f41c7e0de622..4a8062f8b1cc 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -53,6 +53,15 @@ int ieee80211_if_add(struct net_device *dev, const char *name,
53 if (!ndev) 53 if (!ndev)
54 return -ENOMEM; 54 return -ENOMEM;
55 55
56 ndev->needed_headroom = local->tx_headroom +
57 4*6 /* four MAC addresses */
58 + 2 + 2 + 2 + 2 /* ctl, dur, seq, qos */
59 + 6 /* mesh */
60 + 8 /* rfc1042/bridge tunnel */
61 - ETH_HLEN /* ethernet hard_header_len */
62 + IEEE80211_ENCRYPT_HEADROOM;
63 ndev->needed_tailroom = IEEE80211_ENCRYPT_TAILROOM;
64
56 ret = dev_alloc_name(ndev, ndev->name); 65 ret = dev_alloc_name(ndev, ndev->name);
57 if (ret < 0) 66 if (ret < 0)
58 goto fail; 67 goto fail;
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
index 55e76117da9e..eb347eca30b5 100644
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -1771,6 +1771,7 @@ fail_wep:
1771fail_rate: 1771fail_rate:
1772 ieee80211_debugfs_remove_netdev(IEEE80211_DEV_TO_SUB_IF(local->mdev)); 1772 ieee80211_debugfs_remove_netdev(IEEE80211_DEV_TO_SUB_IF(local->mdev));
1773 unregister_netdevice(local->mdev); 1773 unregister_netdevice(local->mdev);
1774 local->mdev = NULL;
1774fail_dev: 1775fail_dev:
1775 rtnl_unlock(); 1776 rtnl_unlock();
1776 sta_info_stop(local); 1777 sta_info_stop(local);
@@ -1778,8 +1779,10 @@ fail_sta_info:
1778 debugfs_hw_del(local); 1779 debugfs_hw_del(local);
1779 destroy_workqueue(local->hw.workqueue); 1780 destroy_workqueue(local->hw.workqueue);
1780fail_workqueue: 1781fail_workqueue:
1781 ieee80211_if_free(local->mdev); 1782 if (local->mdev != NULL) {
1782 local->mdev = NULL; 1783 ieee80211_if_free(local->mdev);
1784 local->mdev = NULL;
1785 }
1783fail_mdev_alloc: 1786fail_mdev_alloc:
1784 wiphy_unregister(local->hw.wiphy); 1787 wiphy_unregister(local->hw.wiphy);
1785 return result; 1788 return result;
diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c
index f76bc26ae4d2..697ef67f96b6 100644
--- a/net/mac80211/mesh.c
+++ b/net/mac80211/mesh.c
@@ -397,7 +397,7 @@ int ieee80211_new_mesh_header(struct ieee80211s_hdr *meshhdr,
397 put_unaligned(cpu_to_le32(sdata->u.sta.mesh_seqnum), &meshhdr->seqnum); 397 put_unaligned(cpu_to_le32(sdata->u.sta.mesh_seqnum), &meshhdr->seqnum);
398 sdata->u.sta.mesh_seqnum++; 398 sdata->u.sta.mesh_seqnum++;
399 399
400 return 5; 400 return 6;
401} 401}
402 402
403void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata) 403void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata)
diff --git a/net/mac80211/mesh_hwmp.c b/net/mac80211/mesh_hwmp.c
index 3df809222d1c..af0cd1e3e213 100644
--- a/net/mac80211/mesh_hwmp.c
+++ b/net/mac80211/mesh_hwmp.c
@@ -120,7 +120,7 @@ static int mesh_path_sel_frame_tx(enum mpath_frame_type action, u8 flags,
120 *pos++ = WLAN_EID_PREP; 120 *pos++ = WLAN_EID_PREP;
121 break; 121 break;
122 default: 122 default:
123 kfree(skb); 123 kfree_skb(skb);
124 return -ENOTSUPP; 124 return -ENOTSUPP;
125 break; 125 break;
126 } 126 }
diff --git a/net/mac80211/mesh_pathtbl.c b/net/mac80211/mesh_pathtbl.c
index 5845dc21ce85..99c2d360888e 100644
--- a/net/mac80211/mesh_pathtbl.c
+++ b/net/mac80211/mesh_pathtbl.c
@@ -158,19 +158,25 @@ int mesh_path_add(u8 *dst, struct net_device *dev)
158 if (atomic_add_unless(&sdata->u.sta.mpaths, 1, MESH_MAX_MPATHS) == 0) 158 if (atomic_add_unless(&sdata->u.sta.mpaths, 1, MESH_MAX_MPATHS) == 0)
159 return -ENOSPC; 159 return -ENOSPC;
160 160
161 read_lock(&pathtbl_resize_lock);
162
163 new_mpath = kzalloc(sizeof(struct mesh_path), GFP_KERNEL); 161 new_mpath = kzalloc(sizeof(struct mesh_path), GFP_KERNEL);
164 if (!new_mpath) { 162 if (!new_mpath) {
165 atomic_dec(&sdata->u.sta.mpaths); 163 atomic_dec(&sdata->u.sta.mpaths);
166 err = -ENOMEM; 164 err = -ENOMEM;
167 goto endadd2; 165 goto endadd2;
168 } 166 }
167 new_node = kmalloc(sizeof(struct mpath_node), GFP_KERNEL);
168 if (!new_node) {
169 kfree(new_mpath);
170 atomic_dec(&sdata->u.sta.mpaths);
171 err = -ENOMEM;
172 goto endadd2;
173 }
174
175 read_lock(&pathtbl_resize_lock);
169 memcpy(new_mpath->dst, dst, ETH_ALEN); 176 memcpy(new_mpath->dst, dst, ETH_ALEN);
170 new_mpath->dev = dev; 177 new_mpath->dev = dev;
171 new_mpath->flags = 0; 178 new_mpath->flags = 0;
172 skb_queue_head_init(&new_mpath->frame_queue); 179 skb_queue_head_init(&new_mpath->frame_queue);
173 new_node = kmalloc(sizeof(struct mpath_node), GFP_KERNEL);
174 new_node->mpath = new_mpath; 180 new_node->mpath = new_mpath;
175 new_mpath->timer.data = (unsigned long) new_mpath; 181 new_mpath->timer.data = (unsigned long) new_mpath;
176 new_mpath->timer.function = mesh_path_timer; 182 new_mpath->timer.function = mesh_path_timer;
@@ -202,7 +208,6 @@ int mesh_path_add(u8 *dst, struct net_device *dev)
202 208
203endadd: 209endadd:
204 spin_unlock(&mesh_paths->hashwlock[hash_idx]); 210 spin_unlock(&mesh_paths->hashwlock[hash_idx]);
205endadd2:
206 read_unlock(&pathtbl_resize_lock); 211 read_unlock(&pathtbl_resize_lock);
207 if (!err && grow) { 212 if (!err && grow) {
208 struct mesh_table *oldtbl, *newtbl; 213 struct mesh_table *oldtbl, *newtbl;
@@ -215,10 +220,12 @@ endadd2:
215 return -ENOMEM; 220 return -ENOMEM;
216 } 221 }
217 rcu_assign_pointer(mesh_paths, newtbl); 222 rcu_assign_pointer(mesh_paths, newtbl);
223 write_unlock(&pathtbl_resize_lock);
224
218 synchronize_rcu(); 225 synchronize_rcu();
219 mesh_table_free(oldtbl, false); 226 mesh_table_free(oldtbl, false);
220 write_unlock(&pathtbl_resize_lock);
221 } 227 }
228endadd2:
222 return err; 229 return err;
223} 230}
224 231
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 55b85ae5bc11..5d7719f44bea 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -651,6 +651,26 @@ static void ieee80211_authenticate(struct net_device *dev,
651 mod_timer(&ifsta->timer, jiffies + IEEE80211_AUTH_TIMEOUT); 651 mod_timer(&ifsta->timer, jiffies + IEEE80211_AUTH_TIMEOUT);
652} 652}
653 653
654static int ieee80211_compatible_rates(struct ieee80211_sta_bss *bss,
655 struct ieee80211_supported_band *sband,
656 u64 *rates)
657{
658 int i, j, count;
659 *rates = 0;
660 count = 0;
661 for (i = 0; i < bss->supp_rates_len; i++) {
662 int rate = (bss->supp_rates[i] & 0x7F) * 5;
663
664 for (j = 0; j < sband->n_bitrates; j++)
665 if (sband->bitrates[j].bitrate == rate) {
666 *rates |= BIT(j);
667 count++;
668 break;
669 }
670 }
671
672 return count;
673}
654 674
655static void ieee80211_send_assoc(struct net_device *dev, 675static void ieee80211_send_assoc(struct net_device *dev,
656 struct ieee80211_if_sta *ifsta) 676 struct ieee80211_if_sta *ifsta)
@@ -659,11 +679,12 @@ static void ieee80211_send_assoc(struct net_device *dev,
659 struct sk_buff *skb; 679 struct sk_buff *skb;
660 struct ieee80211_mgmt *mgmt; 680 struct ieee80211_mgmt *mgmt;
661 u8 *pos, *ies; 681 u8 *pos, *ies;
662 int i, len; 682 int i, len, count, rates_len, supp_rates_len;
663 u16 capab; 683 u16 capab;
664 struct ieee80211_sta_bss *bss; 684 struct ieee80211_sta_bss *bss;
665 int wmm = 0; 685 int wmm = 0;
666 struct ieee80211_supported_band *sband; 686 struct ieee80211_supported_band *sband;
687 u64 rates = 0;
667 688
668 skb = dev_alloc_skb(local->hw.extra_tx_headroom + 689 skb = dev_alloc_skb(local->hw.extra_tx_headroom +
669 sizeof(*mgmt) + 200 + ifsta->extra_ie_len + 690 sizeof(*mgmt) + 200 + ifsta->extra_ie_len +
@@ -725,24 +746,39 @@ static void ieee80211_send_assoc(struct net_device *dev,
725 *pos++ = ifsta->ssid_len; 746 *pos++ = ifsta->ssid_len;
726 memcpy(pos, ifsta->ssid, ifsta->ssid_len); 747 memcpy(pos, ifsta->ssid, ifsta->ssid_len);
727 748
749 /* all supported rates should be added here but some APs
750 * (e.g. D-Link DAP 1353 in b-only mode) don't like that
751 * Therefore only add rates the AP supports */
752 rates_len = ieee80211_compatible_rates(bss, sband, &rates);
753 supp_rates_len = rates_len;
754 if (supp_rates_len > 8)
755 supp_rates_len = 8;
756
728 len = sband->n_bitrates; 757 len = sband->n_bitrates;
729 if (len > 8) 758 pos = skb_put(skb, supp_rates_len + 2);
730 len = 8;
731 pos = skb_put(skb, len + 2);
732 *pos++ = WLAN_EID_SUPP_RATES; 759 *pos++ = WLAN_EID_SUPP_RATES;
733 *pos++ = len; 760 *pos++ = supp_rates_len;
734 for (i = 0; i < len; i++) {
735 int rate = sband->bitrates[i].bitrate;
736 *pos++ = (u8) (rate / 5);
737 }
738 761
739 if (sband->n_bitrates > len) { 762 count = 0;
740 pos = skb_put(skb, sband->n_bitrates - len + 2); 763 for (i = 0; i < sband->n_bitrates; i++) {
741 *pos++ = WLAN_EID_EXT_SUPP_RATES; 764 if (BIT(i) & rates) {
742 *pos++ = sband->n_bitrates - len;
743 for (i = len; i < sband->n_bitrates; i++) {
744 int rate = sband->bitrates[i].bitrate; 765 int rate = sband->bitrates[i].bitrate;
745 *pos++ = (u8) (rate / 5); 766 *pos++ = (u8) (rate / 5);
767 if (++count == 8)
768 break;
769 }
770 }
771
772 if (count == 8) {
773 pos = skb_put(skb, rates_len - count + 2);
774 *pos++ = WLAN_EID_EXT_SUPP_RATES;
775 *pos++ = rates_len - count;
776
777 for (i++; i < sband->n_bitrates; i++) {
778 if (BIT(i) & rates) {
779 int rate = sband->bitrates[i].bitrate;
780 *pos++ = (u8) (rate / 5);
781 }
746 } 782 }
747 } 783 }
748 784
diff --git a/net/mac80211/rc80211_pid_debugfs.c b/net/mac80211/rc80211_pid_debugfs.c
index ae75d4178739..ff5c380f3c13 100644
--- a/net/mac80211/rc80211_pid_debugfs.c
+++ b/net/mac80211/rc80211_pid_debugfs.c
@@ -85,7 +85,7 @@ static int rate_control_pid_events_open(struct inode *inode, struct file *file)
85 struct rc_pid_sta_info *sinfo = inode->i_private; 85 struct rc_pid_sta_info *sinfo = inode->i_private;
86 struct rc_pid_event_buffer *events = &sinfo->events; 86 struct rc_pid_event_buffer *events = &sinfo->events;
87 struct rc_pid_events_file_info *file_info; 87 struct rc_pid_events_file_info *file_info;
88 unsigned int status; 88 unsigned long status;
89 89
90 /* Allocate a state struct */ 90 /* Allocate a state struct */
91 file_info = kmalloc(sizeof(*file_info), GFP_KERNEL); 91 file_info = kmalloc(sizeof(*file_info), GFP_KERNEL);
@@ -135,7 +135,7 @@ static ssize_t rate_control_pid_events_read(struct file *file, char __user *buf,
135 char pb[RC_PID_PRINT_BUF_SIZE]; 135 char pb[RC_PID_PRINT_BUF_SIZE];
136 int ret; 136 int ret;
137 int p; 137 int p;
138 unsigned int status; 138 unsigned long status;
139 139
140 /* Check if there is something to read. */ 140 /* Check if there is something to read. */
141 if (events->next_entry == file_info->next_entry) { 141 if (events->next_entry == file_info->next_entry) {
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index e8b89c89e875..9b5a3cbec265 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -1300,11 +1300,11 @@ ieee80211_deliver_skb(struct ieee80211_rx_data *rx)
1300 if (is_multicast_ether_addr(skb->data)) { 1300 if (is_multicast_ether_addr(skb->data)) {
1301 if (*mesh_ttl > 0) { 1301 if (*mesh_ttl > 0) {
1302 xmit_skb = skb_copy(skb, GFP_ATOMIC); 1302 xmit_skb = skb_copy(skb, GFP_ATOMIC);
1303 if (!xmit_skb && net_ratelimit()) 1303 if (xmit_skb)
1304 xmit_skb->pkt_type = PACKET_OTHERHOST;
1305 else if (net_ratelimit())
1304 printk(KERN_DEBUG "%s: failed to clone " 1306 printk(KERN_DEBUG "%s: failed to clone "
1305 "multicast frame\n", dev->name); 1307 "multicast frame\n", dev->name);
1306 else
1307 xmit_skb->pkt_type = PACKET_OTHERHOST;
1308 } else 1308 } else
1309 IEEE80211_IFSTA_MESH_CTR_INC(&sdata->u.sta, 1309 IEEE80211_IFSTA_MESH_CTR_INC(&sdata->u.sta,
1310 dropped_frames_ttl); 1310 dropped_frames_ttl);
@@ -1390,7 +1390,7 @@ ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx)
1390 padding = ((4 - subframe_len) & 0x3); 1390 padding = ((4 - subframe_len) & 0x3);
1391 /* the last MSDU has no padding */ 1391 /* the last MSDU has no padding */
1392 if (subframe_len > remaining) { 1392 if (subframe_len > remaining) {
1393 printk(KERN_DEBUG "%s: wrong buffer size", dev->name); 1393 printk(KERN_DEBUG "%s: wrong buffer size\n", dev->name);
1394 return RX_DROP_UNUSABLE; 1394 return RX_DROP_UNUSABLE;
1395 } 1395 }
1396 1396
@@ -1413,7 +1413,7 @@ ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx)
1413 eth = (struct ethhdr *) skb_pull(skb, ntohs(len) + 1413 eth = (struct ethhdr *) skb_pull(skb, ntohs(len) +
1414 padding); 1414 padding);
1415 if (!eth) { 1415 if (!eth) {
1416 printk(KERN_DEBUG "%s: wrong buffer size ", 1416 printk(KERN_DEBUG "%s: wrong buffer size\n",
1417 dev->name); 1417 dev->name);
1418 dev_kfree_skb(frame); 1418 dev_kfree_skb(frame);
1419 return RX_DROP_UNUSABLE; 1419 return RX_DROP_UNUSABLE;
@@ -1947,7 +1947,7 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
1947 if (!skb_new) { 1947 if (!skb_new) {
1948 if (net_ratelimit()) 1948 if (net_ratelimit())
1949 printk(KERN_DEBUG "%s: failed to copy " 1949 printk(KERN_DEBUG "%s: failed to copy "
1950 "multicast frame for %s", 1950 "multicast frame for %s\n",
1951 wiphy_name(local->hw.wiphy), 1951 wiphy_name(local->hw.wiphy),
1952 prev->dev->name); 1952 prev->dev->name);
1953 continue; 1953 continue;
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index f35eaea98e73..1d7dd54aacef 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -1562,13 +1562,13 @@ int ieee80211_subif_start_xmit(struct sk_buff *skb,
1562 * be cloned. This could happen, e.g., with Linux bridge code passing 1562 * be cloned. This could happen, e.g., with Linux bridge code passing
1563 * us broadcast frames. */ 1563 * us broadcast frames. */
1564 1564
1565 if (head_need > 0 || skb_cloned(skb)) { 1565 if (head_need > 0 || skb_header_cloned(skb)) {
1566#if 0 1566#if 0
1567 printk(KERN_DEBUG "%s: need to reallocate buffer for %d bytes " 1567 printk(KERN_DEBUG "%s: need to reallocate buffer for %d bytes "
1568 "of headroom\n", dev->name, head_need); 1568 "of headroom\n", dev->name, head_need);
1569#endif 1569#endif
1570 1570
1571 if (skb_cloned(skb)) 1571 if (skb_header_cloned(skb))
1572 I802_DEBUG_INC(local->tx_expand_skb_head_cloned); 1572 I802_DEBUG_INC(local->tx_expand_skb_head_cloned);
1573 else 1573 else
1574 I802_DEBUG_INC(local->tx_expand_skb_head); 1574 I802_DEBUG_INC(local->tx_expand_skb_head);
@@ -1898,6 +1898,7 @@ struct sk_buff *ieee80211_beacon_get(struct ieee80211_hw *hw,
1898 control->flags |= IEEE80211_TXCTL_SHORT_PREAMBLE; 1898 control->flags |= IEEE80211_TXCTL_SHORT_PREAMBLE;
1899 control->antenna_sel_tx = local->hw.conf.antenna_sel_tx; 1899 control->antenna_sel_tx = local->hw.conf.antenna_sel_tx;
1900 control->flags |= IEEE80211_TXCTL_NO_ACK; 1900 control->flags |= IEEE80211_TXCTL_NO_ACK;
1901 control->flags |= IEEE80211_TXCTL_DO_NOT_ENCRYPT;
1901 control->retry_limit = 1; 1902 control->retry_limit = 1;
1902 control->flags |= IEEE80211_TXCTL_CLEAR_PS_FILT; 1903 control->flags |= IEEE80211_TXCTL_CLEAR_PS_FILT;
1903 } 1904 }
diff --git a/net/mac80211/util.c b/net/mac80211/util.c
index cc9f715c7bfc..24a465c4df09 100644
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
@@ -153,15 +153,15 @@ int ieee80211_get_mesh_hdrlen(struct ieee80211s_hdr *meshhdr)
153 /* 7.1.3.5a.2 */ 153 /* 7.1.3.5a.2 */
154 switch (ae) { 154 switch (ae) {
155 case 0: 155 case 0:
156 return 5; 156 return 6;
157 case 1: 157 case 1:
158 return 11; 158 return 12;
159 case 2: 159 case 2:
160 return 17; 160 return 18;
161 case 3: 161 case 3:
162 return 23; 162 return 24;
163 default: 163 default:
164 return 5; 164 return 6;
165 } 165 }
166} 166}
167 167
diff --git a/net/mac80211/wme.c b/net/mac80211/wme.c
index 8ffff27fe000..c87baf4ce979 100644
--- a/net/mac80211/wme.c
+++ b/net/mac80211/wme.c
@@ -379,7 +379,8 @@ static int wme_qdiscop_init(struct Qdisc *qd, struct nlattr *opt)
379 qd->handle); 379 qd->handle);
380 if (!q->queues[i]) { 380 if (!q->queues[i]) {
381 q->queues[i] = &noop_qdisc; 381 q->queues[i] = &noop_qdisc;
382 printk(KERN_ERR "%s child qdisc %i creation failed", dev->name, i); 382 printk(KERN_ERR "%s child qdisc %i creation failed\n",
383 dev->name, i);
383 } 384 }
384 } 385 }
385 386