diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-05-05 11:26:10 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-05-05 11:26:10 -0400 |
| commit | 80445de57764b45fc26315c19fe7dc9fc57c2c65 (patch) | |
| tree | dc288dd1fbf94dae32e08ac9549ed814c2463f99 /net | |
| parent | 32bc66d8d0edc9b04dea9ebac299bdb7ad781d6b (diff) | |
| parent | bc83871e8325bb17da2930a76c2a3806377a76c5 (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (30 commits)
e1000: fix virtualization bug
bonding: fix alb mode locking regression
Bluetooth: Fix issue with sysfs handling for connections
usbnet: CDC EEM support (v5)
tcp: Fix tcp_prequeue() to get correct rto_min value
ehea: fix invalid pointer access
ne2k-pci: Do not register device until initialized.
Subject: [PATCH] br2684: restore net_dev initialization
net: Only store high 16 bits of kernel generated filter priorities
virtio_net: Fix function name typo
virtio_net: Cleanup command queue scatterlist usage
bonding: correct the cleanup in bond_create()
virtio: add missing include to virtio_net.h
smsc95xx: add support for LAN9512 and LAN9514
smsc95xx: configure LED outputs
netconsole: take care of NETDEV_UNREGISTER event
xt_socket: checks for the state of nf_conntrack
bonding: bond_slave_info_query() fix
cxgb3: fixing gcc 4.4 compiler warning: suggest parentheses around operand of ‘!’
netfilter: use likely() in xt_info_rdlock_bh()
...
Diffstat (limited to 'net')
| -rw-r--r-- | net/atm/br2684.c | 1 | ||||
| -rw-r--r-- | net/bluetooth/hci_conn.c | 2 | ||||
| -rw-r--r-- | net/bluetooth/hci_sysfs.c | 74 | ||||
| -rw-r--r-- | net/core/dev.c | 9 | ||||
| -rw-r--r-- | net/core/skbuff.c | 27 | ||||
| -rw-r--r-- | net/ipv4/tcp_input.c | 10 | ||||
| -rw-r--r-- | net/mac80211/main.c | 20 | ||||
| -rw-r--r-- | net/netfilter/Kconfig | 1 | ||||
| -rw-r--r-- | net/sched/cls_api.c | 2 |
9 files changed, 74 insertions, 72 deletions
diff --git a/net/atm/br2684.c b/net/atm/br2684.c index 334fcd4a4ea4..3100a8940afc 100644 --- a/net/atm/br2684.c +++ b/net/atm/br2684.c | |||
| @@ -549,6 +549,7 @@ static void br2684_setup(struct net_device *netdev) | |||
| 549 | struct br2684_dev *brdev = BRPRIV(netdev); | 549 | struct br2684_dev *brdev = BRPRIV(netdev); |
| 550 | 550 | ||
| 551 | ether_setup(netdev); | 551 | ether_setup(netdev); |
| 552 | brdev->net_dev = netdev; | ||
| 552 | 553 | ||
| 553 | netdev->netdev_ops = &br2684_netdev_ops; | 554 | netdev->netdev_ops = &br2684_netdev_ops; |
| 554 | 555 | ||
diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c index 375f4b4f7f79..61309b26f271 100644 --- a/net/bluetooth/hci_conn.c +++ b/net/bluetooth/hci_conn.c | |||
| @@ -248,6 +248,8 @@ struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst) | |||
| 248 | if (hdev->notify) | 248 | if (hdev->notify) |
| 249 | hdev->notify(hdev, HCI_NOTIFY_CONN_ADD); | 249 | hdev->notify(hdev, HCI_NOTIFY_CONN_ADD); |
| 250 | 250 | ||
| 251 | hci_conn_init_sysfs(conn); | ||
| 252 | |||
| 251 | tasklet_enable(&hdev->tx_task); | 253 | tasklet_enable(&hdev->tx_task); |
| 252 | 254 | ||
| 253 | return conn; | 255 | return conn; |
diff --git a/net/bluetooth/hci_sysfs.c b/net/bluetooth/hci_sysfs.c index b7c51082ddeb..582d8877078c 100644 --- a/net/bluetooth/hci_sysfs.c +++ b/net/bluetooth/hci_sysfs.c | |||
| @@ -9,7 +9,7 @@ | |||
| 9 | struct class *bt_class = NULL; | 9 | struct class *bt_class = NULL; |
| 10 | EXPORT_SYMBOL_GPL(bt_class); | 10 | EXPORT_SYMBOL_GPL(bt_class); |
| 11 | 11 | ||
| 12 | static struct workqueue_struct *bluetooth; | 12 | static struct workqueue_struct *bt_workq; |
| 13 | 13 | ||
| 14 | static inline char *link_typetostr(int type) | 14 | static inline char *link_typetostr(int type) |
| 15 | { | 15 | { |
| @@ -89,8 +89,8 @@ static void add_conn(struct work_struct *work) | |||
| 89 | { | 89 | { |
| 90 | struct hci_conn *conn = container_of(work, struct hci_conn, work_add); | 90 | struct hci_conn *conn = container_of(work, struct hci_conn, work_add); |
| 91 | 91 | ||
| 92 | /* ensure previous add/del is complete */ | 92 | /* ensure previous del is complete */ |
| 93 | flush_workqueue(bluetooth); | 93 | flush_work(&conn->work_del); |
| 94 | 94 | ||
| 95 | if (device_add(&conn->dev) < 0) { | 95 | if (device_add(&conn->dev) < 0) { |
| 96 | BT_ERR("Failed to register connection device"); | 96 | BT_ERR("Failed to register connection device"); |
| @@ -98,27 +98,6 @@ static void add_conn(struct work_struct *work) | |||
| 98 | } | 98 | } |
| 99 | } | 99 | } |
| 100 | 100 | ||
| 101 | void hci_conn_add_sysfs(struct hci_conn *conn) | ||
| 102 | { | ||
| 103 | struct hci_dev *hdev = conn->hdev; | ||
| 104 | |||
| 105 | BT_DBG("conn %p", conn); | ||
| 106 | |||
| 107 | conn->dev.type = &bt_link; | ||
| 108 | conn->dev.class = bt_class; | ||
| 109 | conn->dev.parent = &hdev->dev; | ||
| 110 | |||
| 111 | dev_set_name(&conn->dev, "%s:%d", hdev->name, conn->handle); | ||
| 112 | |||
| 113 | dev_set_drvdata(&conn->dev, conn); | ||
| 114 | |||
| 115 | device_initialize(&conn->dev); | ||
| 116 | |||
| 117 | INIT_WORK(&conn->work_add, add_conn); | ||
| 118 | |||
| 119 | queue_work(bluetooth, &conn->work_add); | ||
| 120 | } | ||
| 121 | |||
| 122 | /* | 101 | /* |
| 123 | * The rfcomm tty device will possibly retain even when conn | 102 | * The rfcomm tty device will possibly retain even when conn |
| 124 | * is down, and sysfs doesn't support move zombie device, | 103 | * is down, and sysfs doesn't support move zombie device, |
| @@ -134,8 +113,11 @@ static void del_conn(struct work_struct *work) | |||
| 134 | struct hci_conn *conn = container_of(work, struct hci_conn, work_del); | 113 | struct hci_conn *conn = container_of(work, struct hci_conn, work_del); |
| 135 | struct hci_dev *hdev = conn->hdev; | 114 | struct hci_dev *hdev = conn->hdev; |
| 136 | 115 | ||
| 137 | /* ensure previous add/del is complete */ | 116 | /* ensure previous add is complete */ |
| 138 | flush_workqueue(bluetooth); | 117 | flush_work(&conn->work_add); |
| 118 | |||
| 119 | if (!device_is_registered(&conn->dev)) | ||
| 120 | return; | ||
| 139 | 121 | ||
| 140 | while (1) { | 122 | while (1) { |
| 141 | struct device *dev; | 123 | struct device *dev; |
| @@ -152,16 +134,40 @@ static void del_conn(struct work_struct *work) | |||
| 152 | hci_dev_put(hdev); | 134 | hci_dev_put(hdev); |
| 153 | } | 135 | } |
| 154 | 136 | ||
| 155 | void hci_conn_del_sysfs(struct hci_conn *conn) | 137 | void hci_conn_init_sysfs(struct hci_conn *conn) |
| 156 | { | 138 | { |
| 139 | struct hci_dev *hdev = conn->hdev; | ||
| 140 | |||
| 157 | BT_DBG("conn %p", conn); | 141 | BT_DBG("conn %p", conn); |
| 158 | 142 | ||
| 159 | if (!device_is_registered(&conn->dev)) | 143 | conn->dev.type = &bt_link; |
| 160 | return; | 144 | conn->dev.class = bt_class; |
| 145 | conn->dev.parent = &hdev->dev; | ||
| 146 | |||
| 147 | dev_set_drvdata(&conn->dev, conn); | ||
| 161 | 148 | ||
| 149 | device_initialize(&conn->dev); | ||
| 150 | |||
| 151 | INIT_WORK(&conn->work_add, add_conn); | ||
| 162 | INIT_WORK(&conn->work_del, del_conn); | 152 | INIT_WORK(&conn->work_del, del_conn); |
| 153 | } | ||
| 154 | |||
| 155 | void hci_conn_add_sysfs(struct hci_conn *conn) | ||
| 156 | { | ||
| 157 | struct hci_dev *hdev = conn->hdev; | ||
| 158 | |||
| 159 | BT_DBG("conn %p", conn); | ||
| 160 | |||
| 161 | dev_set_name(&conn->dev, "%s:%d", hdev->name, conn->handle); | ||
| 162 | |||
| 163 | queue_work(bt_workq, &conn->work_add); | ||
| 164 | } | ||
| 165 | |||
| 166 | void hci_conn_del_sysfs(struct hci_conn *conn) | ||
| 167 | { | ||
| 168 | BT_DBG("conn %p", conn); | ||
| 163 | 169 | ||
| 164 | queue_work(bluetooth, &conn->work_del); | 170 | queue_work(bt_workq, &conn->work_del); |
| 165 | } | 171 | } |
| 166 | 172 | ||
| 167 | static inline char *host_typetostr(int type) | 173 | static inline char *host_typetostr(int type) |
| @@ -438,13 +444,13 @@ void hci_unregister_sysfs(struct hci_dev *hdev) | |||
| 438 | 444 | ||
| 439 | int __init bt_sysfs_init(void) | 445 | int __init bt_sysfs_init(void) |
| 440 | { | 446 | { |
| 441 | bluetooth = create_singlethread_workqueue("bluetooth"); | 447 | bt_workq = create_singlethread_workqueue("bluetooth"); |
| 442 | if (!bluetooth) | 448 | if (!bt_workq) |
| 443 | return -ENOMEM; | 449 | return -ENOMEM; |
| 444 | 450 | ||
| 445 | bt_class = class_create(THIS_MODULE, "bluetooth"); | 451 | bt_class = class_create(THIS_MODULE, "bluetooth"); |
| 446 | if (IS_ERR(bt_class)) { | 452 | if (IS_ERR(bt_class)) { |
| 447 | destroy_workqueue(bluetooth); | 453 | destroy_workqueue(bt_workq); |
| 448 | return PTR_ERR(bt_class); | 454 | return PTR_ERR(bt_class); |
| 449 | } | 455 | } |
| 450 | 456 | ||
| @@ -453,7 +459,7 @@ int __init bt_sysfs_init(void) | |||
| 453 | 459 | ||
| 454 | void bt_sysfs_cleanup(void) | 460 | void bt_sysfs_cleanup(void) |
| 455 | { | 461 | { |
| 456 | destroy_workqueue(bluetooth); | 462 | destroy_workqueue(bt_workq); |
| 457 | 463 | ||
| 458 | class_destroy(bt_class); | 464 | class_destroy(bt_class); |
| 459 | } | 465 | } |
diff --git a/net/core/dev.c b/net/core/dev.c index 308a7d0c277f..e2e9e4af3ace 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
| @@ -1735,11 +1735,12 @@ u16 skb_tx_hash(const struct net_device *dev, const struct sk_buff *skb) | |||
| 1735 | { | 1735 | { |
| 1736 | u32 hash; | 1736 | u32 hash; |
| 1737 | 1737 | ||
| 1738 | if (skb_rx_queue_recorded(skb)) { | 1738 | if (skb_rx_queue_recorded(skb)) |
| 1739 | hash = skb_get_rx_queue(skb); | 1739 | return skb_get_rx_queue(skb) % dev->real_num_tx_queues; |
| 1740 | } else if (skb->sk && skb->sk->sk_hash) { | 1740 | |
| 1741 | if (skb->sk && skb->sk->sk_hash) | ||
| 1741 | hash = skb->sk->sk_hash; | 1742 | hash = skb->sk->sk_hash; |
| 1742 | } else | 1743 | else |
| 1743 | hash = skb->protocol; | 1744 | hash = skb->protocol; |
| 1744 | 1745 | ||
| 1745 | hash = jhash_1word(hash, skb_tx_hashrnd); | 1746 | hash = jhash_1word(hash, skb_tx_hashrnd); |
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index ce6356cd9f71..f091a5a845c1 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
| @@ -1365,9 +1365,8 @@ static void sock_spd_release(struct splice_pipe_desc *spd, unsigned int i) | |||
| 1365 | 1365 | ||
| 1366 | static inline struct page *linear_to_page(struct page *page, unsigned int *len, | 1366 | static inline struct page *linear_to_page(struct page *page, unsigned int *len, |
| 1367 | unsigned int *offset, | 1367 | unsigned int *offset, |
| 1368 | struct sk_buff *skb) | 1368 | struct sk_buff *skb, struct sock *sk) |
| 1369 | { | 1369 | { |
| 1370 | struct sock *sk = skb->sk; | ||
| 1371 | struct page *p = sk->sk_sndmsg_page; | 1370 | struct page *p = sk->sk_sndmsg_page; |
| 1372 | unsigned int off; | 1371 | unsigned int off; |
| 1373 | 1372 | ||
| @@ -1405,13 +1404,14 @@ new_page: | |||
| 1405 | */ | 1404 | */ |
| 1406 | static inline int spd_fill_page(struct splice_pipe_desc *spd, struct page *page, | 1405 | static inline int spd_fill_page(struct splice_pipe_desc *spd, struct page *page, |
| 1407 | unsigned int *len, unsigned int offset, | 1406 | unsigned int *len, unsigned int offset, |
| 1408 | struct sk_buff *skb, int linear) | 1407 | struct sk_buff *skb, int linear, |
| 1408 | struct sock *sk) | ||
| 1409 | { | 1409 | { |
| 1410 | if (unlikely(spd->nr_pages == PIPE_BUFFERS)) | 1410 | if (unlikely(spd->nr_pages == PIPE_BUFFERS)) |
| 1411 | return 1; | 1411 | return 1; |
| 1412 | 1412 | ||
| 1413 | if (linear) { | 1413 | if (linear) { |
| 1414 | page = linear_to_page(page, len, &offset, skb); | 1414 | page = linear_to_page(page, len, &offset, skb, sk); |
| 1415 | if (!page) | 1415 | if (!page) |
| 1416 | return 1; | 1416 | return 1; |
| 1417 | } else | 1417 | } else |
| @@ -1442,7 +1442,8 @@ static inline void __segment_seek(struct page **page, unsigned int *poff, | |||
| 1442 | static inline int __splice_segment(struct page *page, unsigned int poff, | 1442 | static inline int __splice_segment(struct page *page, unsigned int poff, |
| 1443 | unsigned int plen, unsigned int *off, | 1443 | unsigned int plen, unsigned int *off, |
| 1444 | unsigned int *len, struct sk_buff *skb, | 1444 | unsigned int *len, struct sk_buff *skb, |
| 1445 | struct splice_pipe_desc *spd, int linear) | 1445 | struct splice_pipe_desc *spd, int linear, |
| 1446 | struct sock *sk) | ||
| 1446 | { | 1447 | { |
| 1447 | if (!*len) | 1448 | if (!*len) |
| 1448 | return 1; | 1449 | return 1; |
| @@ -1465,7 +1466,7 @@ static inline int __splice_segment(struct page *page, unsigned int poff, | |||
| 1465 | /* the linear region may spread across several pages */ | 1466 | /* the linear region may spread across several pages */ |
| 1466 | flen = min_t(unsigned int, flen, PAGE_SIZE - poff); | 1467 | flen = min_t(unsigned int, flen, PAGE_SIZE - poff); |
| 1467 | 1468 | ||
| 1468 | if (spd_fill_page(spd, page, &flen, poff, skb, linear)) | 1469 | if (spd_fill_page(spd, page, &flen, poff, skb, linear, sk)) |
| 1469 | return 1; | 1470 | return 1; |
| 1470 | 1471 | ||
| 1471 | __segment_seek(&page, &poff, &plen, flen); | 1472 | __segment_seek(&page, &poff, &plen, flen); |
| @@ -1481,8 +1482,8 @@ static inline int __splice_segment(struct page *page, unsigned int poff, | |||
| 1481 | * pipe is full or if we already spliced the requested length. | 1482 | * pipe is full or if we already spliced the requested length. |
| 1482 | */ | 1483 | */ |
| 1483 | static int __skb_splice_bits(struct sk_buff *skb, unsigned int *offset, | 1484 | static int __skb_splice_bits(struct sk_buff *skb, unsigned int *offset, |
| 1484 | unsigned int *len, | 1485 | unsigned int *len, struct splice_pipe_desc *spd, |
| 1485 | struct splice_pipe_desc *spd) | 1486 | struct sock *sk) |
| 1486 | { | 1487 | { |
| 1487 | int seg; | 1488 | int seg; |
| 1488 | 1489 | ||
| @@ -1492,7 +1493,7 @@ static int __skb_splice_bits(struct sk_buff *skb, unsigned int *offset, | |||
| 1492 | if (__splice_segment(virt_to_page(skb->data), | 1493 | if (__splice_segment(virt_to_page(skb->data), |
| 1493 | (unsigned long) skb->data & (PAGE_SIZE - 1), | 1494 | (unsigned long) skb->data & (PAGE_SIZE - 1), |
| 1494 | skb_headlen(skb), | 1495 | skb_headlen(skb), |
| 1495 | offset, len, skb, spd, 1)) | 1496 | offset, len, skb, spd, 1, sk)) |
| 1496 | return 1; | 1497 | return 1; |
| 1497 | 1498 | ||
| 1498 | /* | 1499 | /* |
| @@ -1502,7 +1503,7 @@ static int __skb_splice_bits(struct sk_buff *skb, unsigned int *offset, | |||
| 1502 | const skb_frag_t *f = &skb_shinfo(skb)->frags[seg]; | 1503 | const skb_frag_t *f = &skb_shinfo(skb)->frags[seg]; |
| 1503 | 1504 | ||
| 1504 | if (__splice_segment(f->page, f->page_offset, f->size, | 1505 | if (__splice_segment(f->page, f->page_offset, f->size, |
| 1505 | offset, len, skb, spd, 0)) | 1506 | offset, len, skb, spd, 0, sk)) |
| 1506 | return 1; | 1507 | return 1; |
| 1507 | } | 1508 | } |
| 1508 | 1509 | ||
| @@ -1528,12 +1529,13 @@ int skb_splice_bits(struct sk_buff *skb, unsigned int offset, | |||
| 1528 | .ops = &sock_pipe_buf_ops, | 1529 | .ops = &sock_pipe_buf_ops, |
| 1529 | .spd_release = sock_spd_release, | 1530 | .spd_release = sock_spd_release, |
| 1530 | }; | 1531 | }; |
| 1532 | struct sock *sk = skb->sk; | ||
| 1531 | 1533 | ||
| 1532 | /* | 1534 | /* |
| 1533 | * __skb_splice_bits() only fails if the output has no room left, | 1535 | * __skb_splice_bits() only fails if the output has no room left, |
| 1534 | * so no point in going over the frag_list for the error case. | 1536 | * so no point in going over the frag_list for the error case. |
| 1535 | */ | 1537 | */ |
| 1536 | if (__skb_splice_bits(skb, &offset, &tlen, &spd)) | 1538 | if (__skb_splice_bits(skb, &offset, &tlen, &spd, sk)) |
| 1537 | goto done; | 1539 | goto done; |
| 1538 | else if (!tlen) | 1540 | else if (!tlen) |
| 1539 | goto done; | 1541 | goto done; |
| @@ -1545,14 +1547,13 @@ int skb_splice_bits(struct sk_buff *skb, unsigned int offset, | |||
| 1545 | struct sk_buff *list = skb_shinfo(skb)->frag_list; | 1547 | struct sk_buff *list = skb_shinfo(skb)->frag_list; |
| 1546 | 1548 | ||
| 1547 | for (; list && tlen; list = list->next) { | 1549 | for (; list && tlen; list = list->next) { |
| 1548 | if (__skb_splice_bits(list, &offset, &tlen, &spd)) | 1550 | if (__skb_splice_bits(list, &offset, &tlen, &spd, sk)) |
| 1549 | break; | 1551 | break; |
| 1550 | } | 1552 | } |
| 1551 | } | 1553 | } |
| 1552 | 1554 | ||
| 1553 | done: | 1555 | done: |
| 1554 | if (spd.nr_pages) { | 1556 | if (spd.nr_pages) { |
| 1555 | struct sock *sk = skb->sk; | ||
| 1556 | int ret; | 1557 | int ret; |
| 1557 | 1558 | ||
| 1558 | /* | 1559 | /* |
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index c96a6bb25430..eec3e6f9956c 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
| @@ -597,16 +597,6 @@ static void tcp_event_data_recv(struct sock *sk, struct sk_buff *skb) | |||
| 597 | tcp_grow_window(sk, skb); | 597 | tcp_grow_window(sk, skb); |
| 598 | } | 598 | } |
| 599 | 599 | ||
| 600 | static u32 tcp_rto_min(struct sock *sk) | ||
| 601 | { | ||
| 602 | struct dst_entry *dst = __sk_dst_get(sk); | ||
| 603 | u32 rto_min = TCP_RTO_MIN; | ||
| 604 | |||
| 605 | if (dst && dst_metric_locked(dst, RTAX_RTO_MIN)) | ||
| 606 | rto_min = dst_metric_rtt(dst, RTAX_RTO_MIN); | ||
| 607 | return rto_min; | ||
| 608 | } | ||
| 609 | |||
| 610 | /* Called to compute a smoothed rtt estimate. The data fed to this | 600 | /* Called to compute a smoothed rtt estimate. The data fed to this |
| 611 | * routine either comes from timestamps, or from segments that were | 601 | * routine either comes from timestamps, or from segments that were |
| 612 | * known _not_ to have been retransmitted [see Karn/Partridge | 602 | * known _not_ to have been retransmitted [see Karn/Partridge |
diff --git a/net/mac80211/main.c b/net/mac80211/main.c index fbcbed6cad01..14134193cd17 100644 --- a/net/mac80211/main.c +++ b/net/mac80211/main.c | |||
| @@ -757,6 +757,7 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len, | |||
| 757 | local->hw.conf.long_frame_max_tx_count = 4; | 757 | local->hw.conf.long_frame_max_tx_count = 4; |
| 758 | local->hw.conf.short_frame_max_tx_count = 7; | 758 | local->hw.conf.short_frame_max_tx_count = 7; |
| 759 | local->hw.conf.radio_enabled = true; | 759 | local->hw.conf.radio_enabled = true; |
| 760 | local->user_power_level = -1; | ||
| 760 | 761 | ||
| 761 | INIT_LIST_HEAD(&local->interfaces); | 762 | INIT_LIST_HEAD(&local->interfaces); |
| 762 | mutex_init(&local->iflist_mtx); | 763 | mutex_init(&local->iflist_mtx); |
| @@ -909,6 +910,13 @@ int ieee80211_register_hw(struct ieee80211_hw *hw) | |||
| 909 | if (result < 0) | 910 | if (result < 0) |
| 910 | goto fail_sta_info; | 911 | goto fail_sta_info; |
| 911 | 912 | ||
| 913 | result = ieee80211_wep_init(local); | ||
| 914 | if (result < 0) { | ||
| 915 | printk(KERN_DEBUG "%s: Failed to initialize wep: %d\n", | ||
| 916 | wiphy_name(local->hw.wiphy), result); | ||
| 917 | goto fail_wep; | ||
| 918 | } | ||
| 919 | |||
| 912 | rtnl_lock(); | 920 | rtnl_lock(); |
| 913 | result = dev_alloc_name(local->mdev, local->mdev->name); | 921 | result = dev_alloc_name(local->mdev, local->mdev->name); |
| 914 | if (result < 0) | 922 | if (result < 0) |
| @@ -930,14 +938,6 @@ int ieee80211_register_hw(struct ieee80211_hw *hw) | |||
| 930 | goto fail_rate; | 938 | goto fail_rate; |
| 931 | } | 939 | } |
| 932 | 940 | ||
| 933 | result = ieee80211_wep_init(local); | ||
| 934 | |||
| 935 | if (result < 0) { | ||
| 936 | printk(KERN_DEBUG "%s: Failed to initialize wep: %d\n", | ||
| 937 | wiphy_name(local->hw.wiphy), result); | ||
| 938 | goto fail_wep; | ||
| 939 | } | ||
| 940 | |||
| 941 | /* add one default STA interface if supported */ | 941 | /* add one default STA interface if supported */ |
| 942 | if (local->hw.wiphy->interface_modes & BIT(NL80211_IFTYPE_STATION)) { | 942 | if (local->hw.wiphy->interface_modes & BIT(NL80211_IFTYPE_STATION)) { |
| 943 | result = ieee80211_if_add(local, "wlan%d", NULL, | 943 | result = ieee80211_if_add(local, "wlan%d", NULL, |
| @@ -967,13 +967,13 @@ int ieee80211_register_hw(struct ieee80211_hw *hw) | |||
| 967 | 967 | ||
| 968 | return 0; | 968 | return 0; |
| 969 | 969 | ||
| 970 | fail_wep: | ||
| 971 | rate_control_deinitialize(local); | ||
| 972 | fail_rate: | 970 | fail_rate: |
| 973 | unregister_netdevice(local->mdev); | 971 | unregister_netdevice(local->mdev); |
| 974 | local->mdev = NULL; | 972 | local->mdev = NULL; |
| 975 | fail_dev: | 973 | fail_dev: |
| 976 | rtnl_unlock(); | 974 | rtnl_unlock(); |
| 975 | ieee80211_wep_free(local); | ||
| 976 | fail_wep: | ||
| 977 | sta_info_stop(local); | 977 | sta_info_stop(local); |
| 978 | fail_sta_info: | 978 | fail_sta_info: |
| 979 | debugfs_hw_del(local); | 979 | debugfs_hw_del(local); |
diff --git a/net/netfilter/Kconfig b/net/netfilter/Kconfig index 881203c4a142..cb3ad741ebf8 100644 --- a/net/netfilter/Kconfig +++ b/net/netfilter/Kconfig | |||
| @@ -837,6 +837,7 @@ config NETFILTER_XT_MATCH_SOCKET | |||
| 837 | depends on NETFILTER_TPROXY | 837 | depends on NETFILTER_TPROXY |
| 838 | depends on NETFILTER_XTABLES | 838 | depends on NETFILTER_XTABLES |
| 839 | depends on NETFILTER_ADVANCED | 839 | depends on NETFILTER_ADVANCED |
| 840 | depends on !NF_CONNTRACK || NF_CONNTRACK | ||
| 840 | select NF_DEFRAG_IPV4 | 841 | select NF_DEFRAG_IPV4 |
| 841 | help | 842 | help |
| 842 | This option adds a `socket' match, which can be used to match | 843 | This option adds a `socket' match, which can be used to match |
diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c index 173fcc4b050d..0759f32e9dca 100644 --- a/net/sched/cls_api.c +++ b/net/sched/cls_api.c | |||
| @@ -254,7 +254,7 @@ replay: | |||
| 254 | } | 254 | } |
| 255 | tp->ops = tp_ops; | 255 | tp->ops = tp_ops; |
| 256 | tp->protocol = protocol; | 256 | tp->protocol = protocol; |
| 257 | tp->prio = nprio ? : tcf_auto_prio(*back); | 257 | tp->prio = nprio ? : TC_H_MAJ(tcf_auto_prio(*back)); |
| 258 | tp->q = q; | 258 | tp->q = q; |
| 259 | tp->classify = tp_ops->classify; | 259 | tp->classify = tp_ops->classify; |
| 260 | tp->classid = parent; | 260 | tp->classid = parent; |
