diff options
author | David S. Miller <davem@davemloft.net> | 2008-07-06 02:08:07 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-07-06 02:08:07 -0400 |
commit | ea2aca084ba82aaf7c148d04914ceed8758ce08a (patch) | |
tree | dcb3f4f849cf48deac2dd3bafd5c2cd2f0e7dc79 /net | |
parent | f3032be921cd126615ce3bfd7084e3d319f3f892 (diff) | |
parent | c5a78ac00c400df29645e59938700301efb371d0 (diff) |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts:
Documentation/feature-removal-schedule.txt
drivers/net/wan/hdlc_fr.c
drivers/net/wireless/iwlwifi/iwl-4965.c
drivers/net/wireless/iwlwifi/iwl3945-base.c
Diffstat (limited to 'net')
-rw-r--r-- | net/bridge/br_if.c | 10 | ||||
-rw-r--r-- | net/core/dev.c | 4 | ||||
-rw-r--r-- | net/core/fib_rules.c | 4 | ||||
-rw-r--r-- | net/core/filter.c | 1 | ||||
-rw-r--r-- | net/ipv4/tcp.c | 4 | ||||
-rw-r--r-- | net/mac80211/wext.c | 7 | ||||
-rw-r--r-- | net/mac80211/wme.c | 3 | ||||
-rw-r--r-- | net/netfilter/nf_conntrack_proto_tcp.c | 13 | ||||
-rw-r--r-- | net/netlink/af_netlink.c | 2 | ||||
-rw-r--r-- | net/sched/sch_api.c | 6 | ||||
-rw-r--r-- | net/sched/sch_atm.c | 7 | ||||
-rw-r--r-- | net/sched/sch_cbq.c | 8 | ||||
-rw-r--r-- | net/sched/sch_dsmark.c | 2 | ||||
-rw-r--r-- | net/sched/sch_hfsc.c | 6 | ||||
-rw-r--r-- | net/sched/sch_htb.c | 4 | ||||
-rw-r--r-- | net/sched/sch_ingress.c | 2 | ||||
-rw-r--r-- | net/sched/sch_prio.c | 2 | ||||
-rw-r--r-- | net/sched/sch_sfq.c | 2 |
18 files changed, 51 insertions, 36 deletions
diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c index 832a561500d9..497df086141a 100644 --- a/net/bridge/br_if.c +++ b/net/bridge/br_if.c | |||
@@ -441,12 +441,16 @@ int br_del_if(struct net_bridge *br, struct net_device *dev) | |||
441 | 441 | ||
442 | void __exit br_cleanup_bridges(void) | 442 | void __exit br_cleanup_bridges(void) |
443 | { | 443 | { |
444 | struct net_device *dev, *nxt; | 444 | struct net_device *dev; |
445 | 445 | ||
446 | rtnl_lock(); | 446 | rtnl_lock(); |
447 | for_each_netdev_safe(&init_net, dev, nxt) | 447 | restart: |
448 | if (dev->priv_flags & IFF_EBRIDGE) | 448 | for_each_netdev(&init_net, dev) { |
449 | if (dev->priv_flags & IFF_EBRIDGE) { | ||
449 | del_br(dev->priv); | 450 | del_br(dev->priv); |
451 | goto restart; | ||
452 | } | ||
453 | } | ||
450 | rtnl_unlock(); | 454 | rtnl_unlock(); |
451 | 455 | ||
452 | } | 456 | } |
diff --git a/net/core/dev.c b/net/core/dev.c index 472676dd550e..bfa9a6a951dd 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -455,7 +455,7 @@ static int netdev_boot_setup_add(char *name, struct ifmap *map) | |||
455 | for (i = 0; i < NETDEV_BOOT_SETUP_MAX; i++) { | 455 | for (i = 0; i < NETDEV_BOOT_SETUP_MAX; i++) { |
456 | if (s[i].name[0] == '\0' || s[i].name[0] == ' ') { | 456 | if (s[i].name[0] == '\0' || s[i].name[0] == ' ') { |
457 | memset(s[i].name, 0, sizeof(s[i].name)); | 457 | memset(s[i].name, 0, sizeof(s[i].name)); |
458 | strcpy(s[i].name, name); | 458 | strlcpy(s[i].name, name, IFNAMSIZ); |
459 | memcpy(&s[i].map, map, sizeof(s[i].map)); | 459 | memcpy(&s[i].map, map, sizeof(s[i].map)); |
460 | break; | 460 | break; |
461 | } | 461 | } |
@@ -480,7 +480,7 @@ int netdev_boot_setup_check(struct net_device *dev) | |||
480 | 480 | ||
481 | for (i = 0; i < NETDEV_BOOT_SETUP_MAX; i++) { | 481 | for (i = 0; i < NETDEV_BOOT_SETUP_MAX; i++) { |
482 | if (s[i].name[0] != '\0' && s[i].name[0] != ' ' && | 482 | if (s[i].name[0] != '\0' && s[i].name[0] != ' ' && |
483 | !strncmp(dev->name, s[i].name, strlen(s[i].name))) { | 483 | !strcmp(dev->name, s[i].name)) { |
484 | dev->irq = s[i].map.irq; | 484 | dev->irq = s[i].map.irq; |
485 | dev->base_addr = s[i].map.base_addr; | 485 | dev->base_addr = s[i].map.base_addr; |
486 | dev->mem_start = s[i].map.mem_start; | 486 | dev->mem_start = s[i].map.mem_start; |
diff --git a/net/core/fib_rules.c b/net/core/fib_rules.c index 1c2943a119f3..79de3b14a8d1 100644 --- a/net/core/fib_rules.c +++ b/net/core/fib_rules.c | |||
@@ -226,7 +226,7 @@ static int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg) | |||
226 | 226 | ||
227 | ops = lookup_rules_ops(net, frh->family); | 227 | ops = lookup_rules_ops(net, frh->family); |
228 | if (ops == NULL) { | 228 | if (ops == NULL) { |
229 | err = EAFNOSUPPORT; | 229 | err = -EAFNOSUPPORT; |
230 | goto errout; | 230 | goto errout; |
231 | } | 231 | } |
232 | 232 | ||
@@ -365,7 +365,7 @@ static int fib_nl_delrule(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg) | |||
365 | 365 | ||
366 | ops = lookup_rules_ops(net, frh->family); | 366 | ops = lookup_rules_ops(net, frh->family); |
367 | if (ops == NULL) { | 367 | if (ops == NULL) { |
368 | err = EAFNOSUPPORT; | 368 | err = -EAFNOSUPPORT; |
369 | goto errout; | 369 | goto errout; |
370 | } | 370 | } |
371 | 371 | ||
diff --git a/net/core/filter.c b/net/core/filter.c index 4f8369729a4e..df3744355839 100644 --- a/net/core/filter.c +++ b/net/core/filter.c | |||
@@ -68,7 +68,6 @@ static inline void *load_pointer(struct sk_buff *skb, int k, | |||
68 | * sk_filter - run a packet through a socket filter | 68 | * sk_filter - run a packet through a socket filter |
69 | * @sk: sock associated with &sk_buff | 69 | * @sk: sock associated with &sk_buff |
70 | * @skb: buffer to filter | 70 | * @skb: buffer to filter |
71 | * @needlock: set to 1 if the sock is not locked by caller. | ||
72 | * | 71 | * |
73 | * Run the filter code and then cut skb->data to correct size returned by | 72 | * Run the filter code and then cut skb->data to correct size returned by |
74 | * sk_run_filter. If pkt_len is 0 we toss packet. If skb->len is smaller | 73 | * sk_run_filter. If pkt_len is 0 we toss packet. If skb->len is smaller |
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index c66ac83316e8..56a133c61452 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c | |||
@@ -253,6 +253,7 @@ | |||
253 | #include <linux/init.h> | 253 | #include <linux/init.h> |
254 | #include <linux/fs.h> | 254 | #include <linux/fs.h> |
255 | #include <linux/skbuff.h> | 255 | #include <linux/skbuff.h> |
256 | #include <linux/scatterlist.h> | ||
256 | #include <linux/splice.h> | 257 | #include <linux/splice.h> |
257 | #include <linux/net.h> | 258 | #include <linux/net.h> |
258 | #include <linux/socket.h> | 259 | #include <linux/socket.h> |
@@ -1206,7 +1207,8 @@ int tcp_read_sock(struct sock *sk, read_descriptor_t *desc, | |||
1206 | return -ENOTCONN; | 1207 | return -ENOTCONN; |
1207 | while ((skb = tcp_recv_skb(sk, seq, &offset)) != NULL) { | 1208 | while ((skb = tcp_recv_skb(sk, seq, &offset)) != NULL) { |
1208 | if (offset < skb->len) { | 1209 | if (offset < skb->len) { |
1209 | size_t used, len; | 1210 | int used; |
1211 | size_t len; | ||
1210 | 1212 | ||
1211 | len = skb->len - offset; | 1213 | len = skb->len - offset; |
1212 | /* Stop reading if we hit a patch of urgent data */ | 1214 | /* Stop reading if we hit a patch of urgent data */ |
diff --git a/net/mac80211/wext.c b/net/mac80211/wext.c index df0531c28141..1babb979fe00 100644 --- a/net/mac80211/wext.c +++ b/net/mac80211/wext.c | |||
@@ -95,6 +95,13 @@ static int ieee80211_set_encryption(struct net_device *dev, u8 *sta_addr, | |||
95 | } | 95 | } |
96 | } | 96 | } |
97 | 97 | ||
98 | if (alg == ALG_WEP && | ||
99 | key_len != LEN_WEP40 && key_len != LEN_WEP104) { | ||
100 | ieee80211_key_free(key); | ||
101 | err = -EINVAL; | ||
102 | goto out_unlock; | ||
103 | } | ||
104 | |||
98 | ieee80211_key_link(key, sdata, sta); | 105 | ieee80211_key_link(key, sdata, sta); |
99 | 106 | ||
100 | if (set_tx_key || (!sta && !sdata->default_key && key)) | 107 | if (set_tx_key || (!sta && !sdata->default_key && key)) |
diff --git a/net/mac80211/wme.c b/net/mac80211/wme.c index f23b5a4d4ac9..ffe1af82fa4d 100644 --- a/net/mac80211/wme.c +++ b/net/mac80211/wme.c | |||
@@ -308,8 +308,7 @@ static void wme_qdiscop_destroy(struct Qdisc* qd) | |||
308 | struct ieee80211_hw *hw = &local->hw; | 308 | struct ieee80211_hw *hw = &local->hw; |
309 | int queue; | 309 | int queue; |
310 | 310 | ||
311 | tcf_destroy_chain(q->filter_list); | 311 | tcf_destroy_chain(&q->filter_list); |
312 | q->filter_list = NULL; | ||
313 | 312 | ||
314 | for (queue = 0; queue < QD_NUM(hw); queue++) { | 313 | for (queue = 0; queue < QD_NUM(hw); queue++) { |
315 | skb_queue_purge(&q->requeued[queue]); | 314 | skb_queue_purge(&q->requeued[queue]); |
diff --git a/net/netfilter/nf_conntrack_proto_tcp.c b/net/netfilter/nf_conntrack_proto_tcp.c index 8db13fba10bc..740acd6bc7d9 100644 --- a/net/netfilter/nf_conntrack_proto_tcp.c +++ b/net/netfilter/nf_conntrack_proto_tcp.c | |||
@@ -331,12 +331,13 @@ static unsigned int get_conntrack_index(const struct tcphdr *tcph) | |||
331 | 331 | ||
332 | I. Upper bound for valid data: seq <= sender.td_maxend | 332 | I. Upper bound for valid data: seq <= sender.td_maxend |
333 | II. Lower bound for valid data: seq + len >= sender.td_end - receiver.td_maxwin | 333 | II. Lower bound for valid data: seq + len >= sender.td_end - receiver.td_maxwin |
334 | III. Upper bound for valid ack: sack <= receiver.td_end | 334 | III. Upper bound for valid (s)ack: sack <= receiver.td_end |
335 | IV. Lower bound for valid ack: ack >= receiver.td_end - MAXACKWINDOW | 335 | IV. Lower bound for valid (s)ack: sack >= receiver.td_end - MAXACKWINDOW |
336 | 336 | ||
337 | where sack is the highest right edge of sack block found in the packet. | 337 | where sack is the highest right edge of sack block found in the packet |
338 | or ack in the case of packet without SACK option. | ||
338 | 339 | ||
339 | The upper bound limit for a valid ack is not ignored - | 340 | The upper bound limit for a valid (s)ack is not ignored - |
340 | we doesn't have to deal with fragments. | 341 | we doesn't have to deal with fragments. |
341 | */ | 342 | */ |
342 | 343 | ||
@@ -606,12 +607,12 @@ static bool tcp_in_window(const struct nf_conn *ct, | |||
606 | before(seq, sender->td_maxend + 1), | 607 | before(seq, sender->td_maxend + 1), |
607 | after(end, sender->td_end - receiver->td_maxwin - 1), | 608 | after(end, sender->td_end - receiver->td_maxwin - 1), |
608 | before(sack, receiver->td_end + 1), | 609 | before(sack, receiver->td_end + 1), |
609 | after(ack, receiver->td_end - MAXACKWINDOW(sender))); | 610 | after(sack, receiver->td_end - MAXACKWINDOW(sender) - 1)); |
610 | 611 | ||
611 | if (before(seq, sender->td_maxend + 1) && | 612 | if (before(seq, sender->td_maxend + 1) && |
612 | after(end, sender->td_end - receiver->td_maxwin - 1) && | 613 | after(end, sender->td_end - receiver->td_maxwin - 1) && |
613 | before(sack, receiver->td_end + 1) && | 614 | before(sack, receiver->td_end + 1) && |
614 | after(ack, receiver->td_end - MAXACKWINDOW(sender))) { | 615 | after(sack, receiver->td_end - MAXACKWINDOW(sender) - 1)) { |
615 | /* | 616 | /* |
616 | * Take into account window scaling (RFC 1323). | 617 | * Take into account window scaling (RFC 1323). |
617 | */ | 618 | */ |
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index 6507c02dbe0d..98bfe277eab2 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c | |||
@@ -886,7 +886,7 @@ retry: | |||
886 | return netlink_unicast_kernel(sk, skb); | 886 | return netlink_unicast_kernel(sk, skb); |
887 | 887 | ||
888 | if (sk_filter(sk, skb)) { | 888 | if (sk_filter(sk, skb)) { |
889 | int err = skb->len; | 889 | err = skb->len; |
890 | kfree_skb(skb); | 890 | kfree_skb(skb); |
891 | sock_put(sk); | 891 | sock_put(sk); |
892 | return err; | 892 | return err; |
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c index c40773cdbe45..10f01ad04380 100644 --- a/net/sched/sch_api.c +++ b/net/sched/sch_api.c | |||
@@ -1252,12 +1252,12 @@ void tcf_destroy(struct tcf_proto *tp) | |||
1252 | kfree(tp); | 1252 | kfree(tp); |
1253 | } | 1253 | } |
1254 | 1254 | ||
1255 | void tcf_destroy_chain(struct tcf_proto *fl) | 1255 | void tcf_destroy_chain(struct tcf_proto **fl) |
1256 | { | 1256 | { |
1257 | struct tcf_proto *tp; | 1257 | struct tcf_proto *tp; |
1258 | 1258 | ||
1259 | while ((tp = fl) != NULL) { | 1259 | while ((tp = *fl) != NULL) { |
1260 | fl = tp->next; | 1260 | *fl = tp->next; |
1261 | tcf_destroy(tp); | 1261 | tcf_destroy(tp); |
1262 | } | 1262 | } |
1263 | } | 1263 | } |
diff --git a/net/sched/sch_atm.c b/net/sched/sch_atm.c index 335273416384..db0e23ae85f8 100644 --- a/net/sched/sch_atm.c +++ b/net/sched/sch_atm.c | |||
@@ -160,7 +160,7 @@ static void atm_tc_put(struct Qdisc *sch, unsigned long cl) | |||
160 | *prev = flow->next; | 160 | *prev = flow->next; |
161 | pr_debug("atm_tc_put: qdisc %p\n", flow->q); | 161 | pr_debug("atm_tc_put: qdisc %p\n", flow->q); |
162 | qdisc_destroy(flow->q); | 162 | qdisc_destroy(flow->q); |
163 | tcf_destroy_chain(flow->filter_list); | 163 | tcf_destroy_chain(&flow->filter_list); |
164 | if (flow->sock) { | 164 | if (flow->sock) { |
165 | pr_debug("atm_tc_put: f_count %d\n", | 165 | pr_debug("atm_tc_put: f_count %d\n", |
166 | file_count(flow->sock->file)); | 166 | file_count(flow->sock->file)); |
@@ -586,10 +586,11 @@ static void atm_tc_destroy(struct Qdisc *sch) | |||
586 | struct atm_flow_data *flow; | 586 | struct atm_flow_data *flow; |
587 | 587 | ||
588 | pr_debug("atm_tc_destroy(sch %p,[qdisc %p])\n", sch, p); | 588 | pr_debug("atm_tc_destroy(sch %p,[qdisc %p])\n", sch, p); |
589 | for (flow = p->flows; flow; flow = flow->next) | ||
590 | tcf_destroy_chain(&flow->filter_list); | ||
591 | |||
589 | /* races ? */ | 592 | /* races ? */ |
590 | while ((flow = p->flows)) { | 593 | while ((flow = p->flows)) { |
591 | tcf_destroy_chain(flow->filter_list); | ||
592 | flow->filter_list = NULL; | ||
593 | if (flow->ref > 1) | 594 | if (flow->ref > 1) |
594 | printk(KERN_ERR "atm_destroy: %p->ref = %d\n", flow, | 595 | printk(KERN_ERR "atm_destroy: %p->ref = %d\n", flow, |
595 | flow->ref); | 596 | flow->ref); |
diff --git a/net/sched/sch_cbq.c b/net/sched/sch_cbq.c index 09969c1fbc08..2a3c97f7dc63 100644 --- a/net/sched/sch_cbq.c +++ b/net/sched/sch_cbq.c | |||
@@ -1704,7 +1704,7 @@ static void cbq_destroy_class(struct Qdisc *sch, struct cbq_class *cl) | |||
1704 | 1704 | ||
1705 | BUG_TRAP(!cl->filters); | 1705 | BUG_TRAP(!cl->filters); |
1706 | 1706 | ||
1707 | tcf_destroy_chain(cl->filter_list); | 1707 | tcf_destroy_chain(&cl->filter_list); |
1708 | qdisc_destroy(cl->q); | 1708 | qdisc_destroy(cl->q); |
1709 | qdisc_put_rtab(cl->R_tab); | 1709 | qdisc_put_rtab(cl->R_tab); |
1710 | gen_kill_estimator(&cl->bstats, &cl->rate_est); | 1710 | gen_kill_estimator(&cl->bstats, &cl->rate_est); |
@@ -1728,10 +1728,8 @@ cbq_destroy(struct Qdisc* sch) | |||
1728 | * be bound to classes which have been destroyed already. --TGR '04 | 1728 | * be bound to classes which have been destroyed already. --TGR '04 |
1729 | */ | 1729 | */ |
1730 | for (h = 0; h < 16; h++) { | 1730 | for (h = 0; h < 16; h++) { |
1731 | for (cl = q->classes[h]; cl; cl = cl->next) { | 1731 | for (cl = q->classes[h]; cl; cl = cl->next) |
1732 | tcf_destroy_chain(cl->filter_list); | 1732 | tcf_destroy_chain(&cl->filter_list); |
1733 | cl->filter_list = NULL; | ||
1734 | } | ||
1735 | } | 1733 | } |
1736 | for (h = 0; h < 16; h++) { | 1734 | for (h = 0; h < 16; h++) { |
1737 | struct cbq_class *next; | 1735 | struct cbq_class *next; |
diff --git a/net/sched/sch_dsmark.c b/net/sched/sch_dsmark.c index 64465bacbe79..c4c1317cd47d 100644 --- a/net/sched/sch_dsmark.c +++ b/net/sched/sch_dsmark.c | |||
@@ -416,7 +416,7 @@ static void dsmark_destroy(struct Qdisc *sch) | |||
416 | 416 | ||
417 | pr_debug("dsmark_destroy(sch %p,[qdisc %p])\n", sch, p); | 417 | pr_debug("dsmark_destroy(sch %p,[qdisc %p])\n", sch, p); |
418 | 418 | ||
419 | tcf_destroy_chain(p->filter_list); | 419 | tcf_destroy_chain(&p->filter_list); |
420 | qdisc_destroy(p->q); | 420 | qdisc_destroy(p->q); |
421 | kfree(p->mask); | 421 | kfree(p->mask); |
422 | } | 422 | } |
diff --git a/net/sched/sch_hfsc.c b/net/sched/sch_hfsc.c index fdfaa3fcc16d..e817aa00441d 100644 --- a/net/sched/sch_hfsc.c +++ b/net/sched/sch_hfsc.c | |||
@@ -1123,7 +1123,7 @@ hfsc_destroy_class(struct Qdisc *sch, struct hfsc_class *cl) | |||
1123 | { | 1123 | { |
1124 | struct hfsc_sched *q = qdisc_priv(sch); | 1124 | struct hfsc_sched *q = qdisc_priv(sch); |
1125 | 1125 | ||
1126 | tcf_destroy_chain(cl->filter_list); | 1126 | tcf_destroy_chain(&cl->filter_list); |
1127 | qdisc_destroy(cl->qdisc); | 1127 | qdisc_destroy(cl->qdisc); |
1128 | gen_kill_estimator(&cl->bstats, &cl->rate_est); | 1128 | gen_kill_estimator(&cl->bstats, &cl->rate_est); |
1129 | if (cl != &q->root) | 1129 | if (cl != &q->root) |
@@ -1541,6 +1541,10 @@ hfsc_destroy_qdisc(struct Qdisc *sch) | |||
1541 | unsigned int i; | 1541 | unsigned int i; |
1542 | 1542 | ||
1543 | for (i = 0; i < HFSC_HSIZE; i++) { | 1543 | for (i = 0; i < HFSC_HSIZE; i++) { |
1544 | list_for_each_entry(cl, &q->clhash[i], hlist) | ||
1545 | tcf_destroy_chain(&cl->filter_list); | ||
1546 | } | ||
1547 | for (i = 0; i < HFSC_HSIZE; i++) { | ||
1544 | list_for_each_entry_safe(cl, next, &q->clhash[i], hlist) | 1548 | list_for_each_entry_safe(cl, next, &q->clhash[i], hlist) |
1545 | hfsc_destroy_class(sch, cl); | 1549 | hfsc_destroy_class(sch, cl); |
1546 | } | 1550 | } |
diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c index 2cef8f34b2cb..0284791169c9 100644 --- a/net/sched/sch_htb.c +++ b/net/sched/sch_htb.c | |||
@@ -1236,7 +1236,7 @@ static void htb_destroy_class(struct Qdisc *sch, struct htb_class *cl) | |||
1236 | qdisc_put_rtab(cl->rate); | 1236 | qdisc_put_rtab(cl->rate); |
1237 | qdisc_put_rtab(cl->ceil); | 1237 | qdisc_put_rtab(cl->ceil); |
1238 | 1238 | ||
1239 | tcf_destroy_chain(cl->filter_list); | 1239 | tcf_destroy_chain(&cl->filter_list); |
1240 | 1240 | ||
1241 | while (!list_empty(&cl->children)) | 1241 | while (!list_empty(&cl->children)) |
1242 | htb_destroy_class(sch, list_entry(cl->children.next, | 1242 | htb_destroy_class(sch, list_entry(cl->children.next, |
@@ -1265,7 +1265,7 @@ static void htb_destroy(struct Qdisc *sch) | |||
1265 | and surprisingly it worked in 2.4. But it must precede it | 1265 | and surprisingly it worked in 2.4. But it must precede it |
1266 | because filter need its target class alive to be able to call | 1266 | because filter need its target class alive to be able to call |
1267 | unbind_filter on it (without Oops). */ | 1267 | unbind_filter on it (without Oops). */ |
1268 | tcf_destroy_chain(q->filter_list); | 1268 | tcf_destroy_chain(&q->filter_list); |
1269 | 1269 | ||
1270 | while (!list_empty(&q->root)) | 1270 | while (!list_empty(&q->root)) |
1271 | htb_destroy_class(sch, list_entry(q->root.next, | 1271 | htb_destroy_class(sch, list_entry(q->root.next, |
diff --git a/net/sched/sch_ingress.c b/net/sched/sch_ingress.c index 274b1ddb160c..956c80ad5965 100644 --- a/net/sched/sch_ingress.c +++ b/net/sched/sch_ingress.c | |||
@@ -104,7 +104,7 @@ static void ingress_destroy(struct Qdisc *sch) | |||
104 | { | 104 | { |
105 | struct ingress_qdisc_data *p = qdisc_priv(sch); | 105 | struct ingress_qdisc_data *p = qdisc_priv(sch); |
106 | 106 | ||
107 | tcf_destroy_chain(p->filter_list); | 107 | tcf_destroy_chain(&p->filter_list); |
108 | } | 108 | } |
109 | 109 | ||
110 | static int ingress_dump(struct Qdisc *sch, struct sk_buff *skb) | 110 | static int ingress_dump(struct Qdisc *sch, struct sk_buff *skb) |
diff --git a/net/sched/sch_prio.c b/net/sched/sch_prio.c index 4aa2b45dad0a..5532f1031ab5 100644 --- a/net/sched/sch_prio.c +++ b/net/sched/sch_prio.c | |||
@@ -219,7 +219,7 @@ prio_destroy(struct Qdisc* sch) | |||
219 | int prio; | 219 | int prio; |
220 | struct prio_sched_data *q = qdisc_priv(sch); | 220 | struct prio_sched_data *q = qdisc_priv(sch); |
221 | 221 | ||
222 | tcf_destroy_chain(q->filter_list); | 222 | tcf_destroy_chain(&q->filter_list); |
223 | for (prio=0; prio<q->bands; prio++) | 223 | for (prio=0; prio<q->bands; prio++) |
224 | qdisc_destroy(q->queues[prio]); | 224 | qdisc_destroy(q->queues[prio]); |
225 | } | 225 | } |
diff --git a/net/sched/sch_sfq.c b/net/sched/sch_sfq.c index f0463d757a98..6a97afbfb952 100644 --- a/net/sched/sch_sfq.c +++ b/net/sched/sch_sfq.c | |||
@@ -520,7 +520,7 @@ static void sfq_destroy(struct Qdisc *sch) | |||
520 | { | 520 | { |
521 | struct sfq_sched_data *q = qdisc_priv(sch); | 521 | struct sfq_sched_data *q = qdisc_priv(sch); |
522 | 522 | ||
523 | tcf_destroy_chain(q->filter_list); | 523 | tcf_destroy_chain(&q->filter_list); |
524 | q->perturb_period = 0; | 524 | q->perturb_period = 0; |
525 | del_timer_sync(&q->perturb_timer); | 525 | del_timer_sync(&q->perturb_timer); |
526 | } | 526 | } |