Update of /cvsroot/linux-vax/kernel-2.4/net/sched In directory usw-pr-cvs1:/tmp/cvs-serv32481/sched Modified Files: Makefile cls_fw.c cls_route.c cls_rsvp.c cls_rsvp6.c cls_tcindex.c cls_u32.c sch_api.c sch_cbq.c sch_csz.c sch_dsmark.c sch_gred.c sch_ingress.c sch_prio.c sch_red.c sch_sfq.c sch_tbf.c sch_teql.c Log Message: synch 2.4.15 commit 21 Index: Makefile =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/net/sched/Makefile,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- Makefile 14 Jan 2001 17:14:26 -0000 1.1.1.1 +++ Makefile 9 Apr 2002 16:29:01 -0000 1.2 @@ -1,182 +1,34 @@ # # Makefile for the Linux Traffic Control Unit. # -# Note! Dependencies are done automagically by 'make dep', which also -# removes any old dependencies. DON'T put your own dependencies here -# unless it's something special (ie not a .c file). -# -# Note 2! The CFLAGS definition is now in the main makefile... O_TARGET := sched.o obj-y := sch_generic.o -ifeq ($(CONFIG_NET_SCHED), y) -obj-y += sch_api.o sch_fifo.o - -ifeq ($(CONFIG_NET_ESTIMATOR), y) -obj-y += estimator.o -endif - -ifeq ($(CONFIG_NET_CLS), y) -obj-y += cls_api.o - -ifeq ($(CONFIG_NET_CLS_POLICE), y) -obj-y += police.o -endif - -endif - -ifeq ($(CONFIG_NET_SCH_INGRESS), y) -obj-y += sch_ingress.o -else - ifeq ($(CONFIG_NET_SCH_INGRESS), m) - obj-m += sch_ingress.o - endif -endif - -ifeq ($(CONFIG_NET_SCH_CBQ), y) -obj-y += sch_cbq.o -else - ifeq ($(CONFIG_NET_SCH_CBQ), m) - obj-m += sch_cbq.o - endif -endif - -ifeq ($(CONFIG_NET_SCH_CSZ), y) -obj-y += sch_csz.o -else - ifeq ($(CONFIG_NET_SCH_CSZ), m) - obj-m += sch_csz.o - endif -endif - -ifeq ($(CONFIG_NET_SCH_HPFQ), y) -obj-y += sch_hpfq.o -else - ifeq ($(CONFIG_NET_SCH_HPFQ), m) - obj-m += sch_hpfq.o - endif -endif - -ifeq ($(CONFIG_NET_SCH_HFSC), y) -obj-y += sch_hfsc.o -else - ifeq ($(CONFIG_NET_SCH_HFSC), m) - obj-m += sch_hfsc.o - endif -endif - - -ifeq ($(CONFIG_NET_SCH_SFQ), y) -obj-y += sch_sfq.o -else - ifeq ($(CONFIG_NET_SCH_SFQ), m) - obj-m += sch_sfq.o - endif -endif - -ifeq ($(CONFIG_NET_SCH_RED), y) -obj-y += sch_red.o -else - ifeq ($(CONFIG_NET_SCH_RED), m) - obj-m += sch_red.o - endif -endif - -ifeq ($(CONFIG_NET_SCH_TBF), y) -obj-y += sch_tbf.o -else - ifeq ($(CONFIG_NET_SCH_TBF), m) - obj-m += sch_tbf.o - endif -endif - -ifeq ($(CONFIG_NET_SCH_PRIO), y) -obj-y += sch_prio.o -else - ifeq ($(CONFIG_NET_SCH_PRIO), m) - obj-m += sch_prio.o - endif -endif - -ifeq ($(CONFIG_NET_SCH_TEQL), y) -obj-y += sch_teql.o -else - ifeq ($(CONFIG_NET_SCH_TEQL), m) - obj-m += sch_teql.o - endif -endif - -ifeq ($(CONFIG_NET_SCH_GRED), y) -obj-y += sch_gred.o -else - ifeq ($(CONFIG_NET_SCH_GRED), m) - obj-m += sch_gred.o - endif -endif - -ifeq ($(CONFIG_NET_SCH_DSMARK), y) -obj-y += sch_dsmark.o -else - ifeq ($(CONFIG_NET_SCH_DSMARK), m) - obj-m += sch_dsmark.o - endif -endif - -ifeq ($(CONFIG_NET_CLS_TCINDEX), y) -obj-y += cls_tcindex.o -else - ifeq ($(CONFIG_NET_CLS_TCINDEX), m) - obj-m += cls_tcindex.o - endif -endif - -ifeq ($(CONFIG_NET_SCH_ATM), y) -obj-y += sch_atm.o -endif - -ifeq ($(CONFIG_NET_CLS_U32), y) -obj-y += cls_u32.o -else - ifeq ($(CONFIG_NET_CLS_U32), m) - obj-m += cls_u32.o - endif -endif - -ifeq ($(CONFIG_NET_CLS_RSVP), y) -obj-y += cls_rsvp.o -else - ifeq ($(CONFIG_NET_CLS_RSVP), m) - obj-m += cls_rsvp.o - endif -endif - -ifeq ($(CONFIG_NET_CLS_RSVP6), y) -obj-y += cls_rsvp6.o -else - ifeq ($(CONFIG_NET_CLS_RSVP6), m) - obj-m += cls_rsvp6.o - endif -endif - -ifeq ($(CONFIG_NET_CLS_ROUTE4), y) -obj-y += cls_route.o -else - ifeq ($(CONFIG_NET_CLS_ROUTE4), m) - obj-m += cls_route.o - endif -endif - -ifeq ($(CONFIG_NET_CLS_FW), y) -obj-y += cls_fw.o -else - ifeq ($(CONFIG_NET_CLS_FW), m) - obj-m += cls_fw.o - endif -endif - -endif +obj-$(CONFIG_NET_SCHED) += sch_api.o sch_fifo.o +obj-$(CONFIG_NET_ESTIMATOR) += estimator.o +obj-$(CONFIG_NET_CLS) += cls_api.o +obj-$(CONFIG_NET_CLS_POLICE) += police.o +obj-$(CONFIG_NET_SCH_INGRESS) += sch_ingress.o +obj-$(CONFIG_NET_SCH_CBQ) += sch_cbq.o +obj-$(CONFIG_NET_SCH_CSZ) += sch_csz.o +obj-$(CONFIG_NET_SCH_HPFQ) += sch_hpfq.o +obj-$(CONFIG_NET_SCH_HFSC) += sch_hfsc.o +obj-$(CONFIG_NET_SCH_SFQ) += sch_sfq.o +obj-$(CONFIG_NET_SCH_RED) += sch_red.o +obj-$(CONFIG_NET_SCH_TBF) += sch_tbf.o +obj-$(CONFIG_NET_SCH_PRIO) += sch_prio.o +obj-$(CONFIG_NET_SCH_TEQL) += sch_teql.o +obj-$(CONFIG_NET_SCH_GRED) += sch_gred.o +obj-$(CONFIG_NET_SCH_DSMARK) += sch_dsmark.o +obj-$(CONFIG_NET_CLS_TCINDEX) += cls_tcindex.o +obj-$(CONFIG_NET_SCH_ATM) += sch_atm.o +obj-$(CONFIG_NET_CLS_U32) += cls_u32.o +obj-$(CONFIG_NET_CLS_RSVP) += cls_rsvp.o +obj-$(CONFIG_NET_CLS_RSVP6) += cls_rsvp6.o +obj-$(CONFIG_NET_CLS_ROUTE4) += cls_route.o +obj-$(CONFIG_NET_CLS_FW) += cls_fw.o include $(TOPDIR)/Rules.make Index: cls_fw.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/net/sched/cls_fw.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- cls_fw.c 14 Jan 2001 17:14:52 -0000 1.1.1.1 +++ cls_fw.c 9 Apr 2002 16:29:01 -0000 1.2 @@ -383,3 +383,4 @@ unregister_tcf_proto_ops(&cls_fw_ops); } #endif +MODULE_LICENSE("GPL"); Index: cls_route.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/net/sched/cls_route.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- cls_route.c 14 Jan 2001 17:14:54 -0000 1.1.1.1 +++ cls_route.c 9 Apr 2002 16:29:01 -0000 1.2 @@ -316,13 +316,14 @@ { struct route4_head *head = (struct route4_head*)tp->root; struct route4_filter **fp, *f = (struct route4_filter*)arg; - unsigned h = f->handle; + unsigned h = 0; struct route4_bucket *b; int i; if (!head || !f) return -EINVAL; + h = f->handle; b = f->bkt; for (fp = &b->ht[from_hash(h>>16)]; *fp; fp = &(*fp)->next) { @@ -637,3 +638,4 @@ unregister_tcf_proto_ops(&cls_route4_ops); } #endif +MODULE_LICENSE("GPL"); Index: cls_rsvp.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/net/sched/cls_rsvp.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- cls_rsvp.c 14 Jan 2001 17:14:55 -0000 1.1.1.1 +++ cls_rsvp.c 9 Apr 2002 16:29:01 -0000 1.2 @@ -39,3 +39,4 @@ #define RSVP_OPS cls_rsvp_ops #include "cls_rsvp.h" +MODULE_LICENSE("GPL"); Index: cls_rsvp6.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/net/sched/cls_rsvp6.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- cls_rsvp6.c 14 Jan 2001 17:14:56 -0000 1.1.1.1 +++ cls_rsvp6.c 9 Apr 2002 16:29:01 -0000 1.2 @@ -40,3 +40,4 @@ #define RSVP_OPS cls_rsvp6_ops #include "cls_rsvp.h" +MODULE_LICENSE("GPL"); Index: cls_tcindex.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/net/sched/cls_tcindex.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- cls_tcindex.c 14 Jan 2001 17:15:04 -0000 1.1.1.1 +++ cls_tcindex.c 9 Apr 2002 16:29:01 -0000 1.2 @@ -76,7 +76,7 @@ struct tcindex_filter *f; if (p->perfect) - return p->perfect[key].res.classid ? p->perfect+key : NULL; + return p->perfect[key].res.class ? p->perfect+key : NULL; if (!p->h) return NULL; for (f = p->h[key % p->hash]; f; f = f->next) { @@ -122,8 +122,14 @@ static unsigned long tcindex_get(struct tcf_proto *tp, u32 handle) { + struct tcindex_data *p = PRIV(tp); + struct tcindex_filter_result *r; + DPRINTK("tcindex_get(tp %p,handle 0x%08x)\n",tp,handle); - return (unsigned long) lookup(PRIV(tp),handle); + if (p->perfect && handle >= p->alloc_hash) + return 0; + r = lookup(PRIV(tp),handle); + return r && r->res.class ? (unsigned long) r : 0; } @@ -164,7 +170,7 @@ DPRINTK("tcindex_delete(tp %p,arg 0x%lx),p %p,f %p\n",tp,arg,p,f); if (p->perfect) { - if (!r->res.classid) + if (!r->res.class) return -ENOENT; } else { int i; @@ -212,7 +218,7 @@ struct tcindex_filter *f; struct tcindex_filter_result *r = (struct tcindex_filter_result *) *arg; struct tcindex_filter **walk; - int hash; + int hash,shift; __u16 mask; DPRINTK("tcindex_change(tp %p,handle 0x%08x,tca %p,arg %p),opt %p," @@ -237,17 +243,22 @@ return -EINVAL; mask = *(__u16 *) RTA_DATA(tb[TCA_TCINDEX_MASK-1]); } - if (p->perfect && hash <= mask) + if (!tb[TCA_TCINDEX_SHIFT-1]) + shift = p->shift; + else { + if (RTA_PAYLOAD(tb[TCA_TCINDEX_SHIFT-1]) < sizeof(__u16)) + return -EINVAL; + shift = *(int *) RTA_DATA(tb[TCA_TCINDEX_SHIFT-1]); + } + if (p->perfect && hash <= (mask >> shift)) return -EBUSY; - if ((p->perfect || p->h) && hash > p->alloc_hash) + if (p->perfect && hash > p->alloc_hash) + return -EBUSY; + if (p->h && hash != p->alloc_hash) return -EBUSY; p->hash = hash; p->mask = mask; - if (tb[TCA_TCINDEX_SHIFT-1]) { - if (RTA_PAYLOAD(tb[TCA_TCINDEX_SHIFT-1]) < sizeof(__u16)) - return -EINVAL; - p->shift = *(int *) RTA_DATA(tb[TCA_TCINDEX_SHIFT-1]); - } + p->shift = shift; if (tb[TCA_TCINDEX_FALL_THROUGH-1]) { if (RTA_PAYLOAD(tb[TCA_TCINDEX_FALL_THROUGH-1]) < sizeof(int)) return -EINVAL; @@ -258,9 +269,9 @@ tb[TCA_TCINDEX_POLICE-1]); if (!tb[TCA_TCINDEX_CLASSID-1] && !tb[TCA_TCINDEX_POLICE-1]) return 0; - if (!p->hash) { - if (p->mask < PERFECT_HASH_THRESHOLD) { - p->hash = p->mask+1; + if (!hash) { + if ((mask >> shift) < PERFECT_HASH_THRESHOLD) { + p->hash = (mask >> shift)+1; } else { p->hash = DEFAULT_HASH_SIZE; } @@ -268,7 +279,7 @@ if (!p->perfect && !p->h) { p->alloc_hash = p->hash; DPRINTK("hash %d mask %d\n",p->hash,p->mask); - if (p->hash > p->mask) { + if (p->hash > (mask >> shift)) { p->perfect = kmalloc(p->hash* sizeof(struct tcindex_filter_result),GFP_KERNEL); if (!p->perfect) @@ -283,7 +294,15 @@ memset(p->h, 0, p->hash*sizeof(struct tcindex_filter *)); } } - if (handle > p->mask) + /* + * Note: this could be as restrictive as + * if (handle & ~(mask >> shift)) + * but then, we'd fail handles that may become valid after some + * future mask change. While this is extremely unlikely to ever + * matter, the check below is safer (and also more + * backwards-compatible). + */ + if (p->perfect && handle >= p->alloc_hash) return -EINVAL; if (p->perfect) { r = p->perfect+handle; @@ -308,17 +327,16 @@ } } #ifdef CONFIG_NET_CLS_POLICE - if (!tb[TCA_TCINDEX_POLICE-1]) { - r->police = NULL; - } else { - struct tcf_police *police = - tcf_police_locate(tb[TCA_TCINDEX_POLICE-1],NULL); + { + struct tcf_police *police; - tcf_tree_lock(tp); + police = tb[TCA_TCINDEX_POLICE-1] ? + tcf_police_locate(tb[TCA_TCINDEX_POLICE-1],NULL) : NULL; + tcf_tree_lock(tp); police = xchg(&r->police,police); - tcf_tree_unlock(tp); + tcf_tree_unlock(tp); tcf_police_release(police); - } + } #endif if (r != &new_filter_result) return 0; @@ -339,13 +357,13 @@ static void tcindex_walk(struct tcf_proto *tp, struct tcf_walker *walker) { struct tcindex_data *p = PRIV(tp); - struct tcindex_filter *f; + struct tcindex_filter *f,*next; int i; DPRINTK("tcindex_walk(tp %p,walker %p),p %p\n",tp,walker,p); if (p->perfect) { for (i = 0; i < p->hash; i++) { - if (!p->perfect[i].res.classid) + if (!p->perfect[i].res.class) continue; if (walker->count >= walker->skip) { if (walker->fn(tp, @@ -361,7 +379,8 @@ if (!p->h) return; for (i = 0; i < p->hash; i++) { - for (f = p->h[i]; f; f = f->next) { + for (f = p->h[i]; f; f = next) { + next = f->next; if (walker->count >= walker->skip) { if (walker->fn(tp,(unsigned long) &f->result, walker) < 0) { @@ -496,3 +515,4 @@ unregister_tcf_proto_ops(&cls_tcindex_ops); } #endif +MODULE_LICENSE("GPL"); Index: cls_u32.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/net/sched/cls_u32.c,v retrieving revision 1.1.1.2 retrieving revision 1.2 diff -u -r1.1.1.2 -r1.2 --- cls_u32.c 25 Feb 2001 23:14:57 -0000 1.1.1.2 +++ cls_u32.c 9 Apr 2002 16:29:01 -0000 1.2 @@ -162,7 +162,7 @@ if (!(n->sel.flags&(TC_U32_VAROFFSET|TC_U32_OFFSET|TC_U32_EAT))) goto next_ht; - if (n->sel.flags&(TC_U32_EAT|TC_U32_VAROFFSET)) { + if (n->sel.flags&(TC_U32_OFFSET|TC_U32_VAROFFSET)) { off2 = n->sel.off + 3; if (n->sel.flags&TC_U32_VAROFFSET) off2 += ntohs(n->sel.offmask & *(u16*)(ptr+n->sel.offoff)) >>n->sel.offshift; @@ -726,3 +726,4 @@ unregister_tcf_proto_ops(&cls_u32_ops); } #endif +MODULE_LICENSE("GPL"); Index: sch_api.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/net/sched/sch_api.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- sch_api.c 14 Jan 2001 17:14:48 -0000 1.1.1.1 +++ sch_api.c 9 Apr 2002 16:29:01 -0000 1.2 @@ -1145,8 +1145,10 @@ stop = jiffies + HZ/10; PSCHED_GET_TIME(stamp); do_gettimeofday(&tv); - while (time_before(jiffies, stop)) + while (time_before(jiffies, stop)) { barrier(); + cpu_relax(); + } PSCHED_GET_TIME(stamp1); do_gettimeofday(&tv1); Index: sch_cbq.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/net/sched/sch_cbq.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- sch_cbq.c 14 Jan 2001 17:14:33 -0000 1.1.1.1 +++ sch_cbq.c 9 Apr 2002 16:29:01 -0000 1.2 @@ -282,6 +282,7 @@ case TC_POLICE_SHOT: return NULL; default: + break; } #endif if (cl->level == 0) @@ -506,7 +507,7 @@ } } - q->wd_expires = delay; + q->wd_expires = base_delay; } } @@ -1244,8 +1245,10 @@ cl = cl_head; do { - if (cl->q->ops->drop && cl->q->ops->drop(cl->q)) + if (cl->q->ops->drop && cl->q->ops->drop(cl->q)) { + sch->q.qlen--; return 1; + } } while ((cl = cl->next_alive) != cl_head); } return 0; @@ -1740,9 +1743,13 @@ } for (h = 0; h < 16; h++) { - for (cl = q->classes[h]; cl; cl = cl->next) + struct cbq_class *next; + + for (cl = q->classes[h]; cl; cl = next) { + next = cl->next; if (cl != &q->link) cbq_destroy_class(cl); + } } qdisc_put_rtab(q->link.R_tab); @@ -2113,3 +2120,4 @@ unregister_qdisc(&cbq_qdisc_ops); } #endif +MODULE_LICENSE("GPL"); Index: sch_csz.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/net/sched/sch_csz.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- sch_csz.c 14 Jan 2001 17:14:36 -0000 1.1.1.1 +++ sch_csz.c 9 Apr 2002 16:29:01 -0000 1.2 @@ -1069,3 +1069,4 @@ unregister_qdisc(&csz_qdisc_ops); } #endif +MODULE_LICENSE("GPL"); Index: sch_dsmark.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/net/sched/sch_dsmark.c,v retrieving revision 1.1.1.2 retrieving revision 1.2 diff -u -r1.1.1.2 -r1.2 --- sch_dsmark.c 25 Feb 2001 23:14:57 -0000 1.1.1.2 +++ sch_dsmark.c 9 Apr 2002 16:29:01 -0000 1.2 @@ -84,7 +84,9 @@ static struct Qdisc *dsmark_leaf(struct Qdisc *sch, unsigned long arg) { - return NULL; + struct dsmark_qdisc_data *p = PRIV(sch); + + return p->q; } @@ -187,7 +189,7 @@ struct dsmark_qdisc_data *p = PRIV(sch); struct tcf_result res; int result; - int ret; + int ret = NET_XMIT_POLICED; D2PRINTK("dsmark_enqueue(skb %p,sch %p,[qdisc %p])\n",skb,sch,p); if (p->set_tc_index) { @@ -237,7 +239,7 @@ ((ret = p->q->enqueue(skb,p->q)) != 0)) { sch->stats.drops++; - return 0; + return ret; } sch->stats.bytes += skb->len; sch->stats.packets++; @@ -488,3 +490,4 @@ unregister_qdisc(&dsmark_qdisc_ops); } #endif +MODULE_LICENSE("GPL"); Index: sch_gred.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/net/sched/sch_gred.c,v retrieving revision 1.1.1.2 retrieving revision 1.2 diff -u -r1.1.1.2 -r1.2 --- sch_gred.c 25 Feb 2001 23:14:57 -0000 1.1.1.2 +++ sch_gred.c 9 Apr 2002 16:29:01 -0000 1.2 @@ -298,14 +298,11 @@ static void gred_reset(struct Qdisc* sch) { - struct sk_buff *skb; int i; - struct gred_sched_data *q; struct gred_sched *t= (struct gred_sched *)sch->data; - while((skb=__skb_dequeue(&sch->q))!=NULL) - kfree_skb(skb); + __skb_queue_purge(&sch->q); sch->stats.backlog = 0; @@ -635,3 +632,4 @@ unregister_qdisc(&gred_qdisc_ops); } #endif +MODULE_LICENSE("GPL"); Index: sch_ingress.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/net/sched/sch_ingress.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- sch_ingress.c 14 Jan 2001 17:15:08 -0000 1.1.1.1 +++ sch_ingress.c 9 Apr 2002 16:29:01 -0000 1.2 @@ -392,3 +392,4 @@ unregister_qdisc(&ingress_qdisc_ops); } #endif +MODULE_LICENSE("GPL"); Index: sch_prio.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/net/sched/sch_prio.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- sch_prio.c 14 Jan 2001 17:14:39 -0000 1.1.1.1 +++ sch_prio.c 9 Apr 2002 16:29:01 -0000 1.2 @@ -421,3 +421,4 @@ } #endif +MODULE_LICENSE("GPL"); Index: sch_red.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/net/sched/sch_red.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- sch_red.c 14 Jan 2001 17:14:41 -0000 1.1.1.1 +++ sch_red.c 9 Apr 2002 16:29:01 -0000 1.2 @@ -363,10 +363,8 @@ static void red_reset(struct Qdisc* sch) { struct red_sched_data *q = (struct red_sched_data *)sch->data; - struct sk_buff *skb; - while((skb=__skb_dequeue(&sch->q))!=NULL) - kfree_skb(skb); + __skb_queue_purge(&sch->q); sch->stats.backlog = 0; PSCHED_SET_PASTPERFECT(q->qidlestart); q->qave = 0; @@ -499,3 +497,4 @@ unregister_qdisc(&red_qdisc_ops); } #endif +MODULE_LICENSE("GPL"); Index: sch_sfq.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/net/sched/sch_sfq.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- sch_sfq.c 14 Jan 2001 17:14:42 -0000 1.1.1.1 +++ sch_sfq.c 9 Apr 2002 16:29:01 -0000 1.2 @@ -496,3 +496,4 @@ unregister_qdisc(&sfq_qdisc_ops); } #endif +MODULE_LICENSE("GPL"); Index: sch_tbf.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/net/sched/sch_tbf.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- sch_tbf.c 14 Jan 2001 17:14:44 -0000 1.1.1.1 +++ sch_tbf.c 9 Apr 2002 16:29:01 -0000 1.2 @@ -66,7 +66,7 @@ N(t+delta) = min{B/R, N(t) + delta} If the first packet in queue has length S, it may be - transmited only at the time t_* when S/R <= N(t_*), + transmitted only at the time t_* when S/R <= N(t_*), and in this case N(t) jumps: N(t_* + 0) = N(t_* - 0) - S/R. @@ -227,7 +227,7 @@ } if (!netif_queue_stopped(sch->dev)) { - long delay = PSCHED_US2JIFFIE(max(-toks, -ptoks)); + long delay = PSCHED_US2JIFFIE(max_t(long, -toks, -ptoks)); if (delay == 0) delay = 1; @@ -276,7 +276,7 @@ struct tc_tbf_qopt *qopt; struct qdisc_rate_table *rtab = NULL; struct qdisc_rate_table *ptab = NULL; - int max_size; + int max_size,n; if (rtattr_parse(tb, TCA_TBF_PTAB, RTA_DATA(opt), RTA_PAYLOAD(opt)) || tb[TCA_TBF_PARMS-1] == NULL || @@ -295,15 +295,18 @@ goto done; } - max_size = psched_mtu(sch->dev); + for (n = 0; n < 256; n++) + if (rtab->data[n] > qopt->buffer) break; + max_size = (n << qopt->rate.cell_log)-1; if (ptab) { - int n = max_size>>qopt->peakrate.cell_log; - while (n>0 && ptab->data[n-1] > qopt->mtu) { - max_size -= (1<<qopt->peakrate.cell_log); - n--; - } + int size; + + for (n = 0; n < 256; n++) + if (ptab->data[n] > qopt->mtu) break; + size = (n << qopt->peakrate.cell_log)-1; + if (size < max_size) max_size = size; } - if (rtab->data[max_size>>qopt->rate.cell_log] > qopt->buffer) + if (max_size < 0) goto done; sch_tree_lock(sch); @@ -424,3 +427,4 @@ unregister_qdisc(&tbf_qdisc_ops); } #endif +MODULE_LICENSE("GPL"); Index: sch_teql.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/net/sched/sch_teql.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- sch_teql.c 14 Jan 2001 17:14:56 -0000 1.1.1.1 +++ sch_teql.c 9 Apr 2002 16:29:01 -0000 1.2 @@ -493,3 +493,4 @@ rtnl_unlock(); } #endif +MODULE_LICENSE("GPL"); |