Commit 7c4f750a authored by David S. Miller's avatar David S. Miller

Merge davem@nuts.ninka.net:/disk1/davem/BK/net-2.5

into hera.kernel.org:/home/davem/BK/net-2.5
parents fbbef764 7ae8708f
...@@ -1399,9 +1399,6 @@ static void rt_set_nexthop(struct rtable *rt, struct fib_result *res, u32 itag) ...@@ -1399,9 +1399,6 @@ static void rt_set_nexthop(struct rtable *rt, struct fib_result *res, u32 itag)
rt->rt_gateway = FIB_RES_GW(*res); rt->rt_gateway = FIB_RES_GW(*res);
memcpy(rt->u.dst.metrics, fi->fib_metrics, memcpy(rt->u.dst.metrics, fi->fib_metrics,
sizeof(rt->u.dst.metrics)); sizeof(rt->u.dst.metrics));
if (rt->u.dst.metrics[RTAX_HOPLIMIT-1] == 0)
rt->u.dst.metrics[RTAX_HOPLIMIT-1] =
sysctl_ip_default_ttl;
if (fi->fib_mtu == 0) { if (fi->fib_mtu == 0) {
rt->u.dst.metrics[RTAX_MTU-1] = rt->u.dst.dev->mtu; rt->u.dst.metrics[RTAX_MTU-1] = rt->u.dst.dev->mtu;
if (rt->u.dst.metrics[RTAX_LOCK-1] & (1 << RTAX_MTU) && if (rt->u.dst.metrics[RTAX_LOCK-1] & (1 << RTAX_MTU) &&
...@@ -1415,6 +1412,8 @@ static void rt_set_nexthop(struct rtable *rt, struct fib_result *res, u32 itag) ...@@ -1415,6 +1412,8 @@ static void rt_set_nexthop(struct rtable *rt, struct fib_result *res, u32 itag)
} else } else
rt->u.dst.metrics[RTAX_MTU-1]= rt->u.dst.dev->mtu; rt->u.dst.metrics[RTAX_MTU-1]= rt->u.dst.dev->mtu;
if (rt->u.dst.metrics[RTAX_HOPLIMIT-1] == 0)
rt->u.dst.metrics[RTAX_HOPLIMIT-1] = sysctl_ip_default_ttl;
if (rt->u.dst.metrics[RTAX_MTU-1] > IP_MAX_MTU) if (rt->u.dst.metrics[RTAX_MTU-1] > IP_MAX_MTU)
rt->u.dst.metrics[RTAX_MTU-1] = IP_MAX_MTU; rt->u.dst.metrics[RTAX_MTU-1] = IP_MAX_MTU;
if (rt->u.dst.metrics[RTAX_ADVMSS-1] == 0) if (rt->u.dst.metrics[RTAX_ADVMSS-1] == 0)
......
...@@ -1040,7 +1040,7 @@ int igmp6_event_query(struct sk_buff *skb) ...@@ -1040,7 +1040,7 @@ int igmp6_event_query(struct sk_buff *skb)
/* MLDv1 router present */ /* MLDv1 router present */
/* Translate milliseconds to jiffies */ /* Translate milliseconds to jiffies */
max_delay = ntohs(hdr->icmp6_maxdelay)*(HZ/10); max_delay = (ntohs(hdr->icmp6_maxdelay)*HZ)/1000;
switchback = (idev->mc_qrv + 1) * max_delay; switchback = (idev->mc_qrv + 1) * max_delay;
idev->mc_v1_seen = jiffies + switchback; idev->mc_v1_seen = jiffies + switchback;
...@@ -1052,7 +1052,7 @@ int igmp6_event_query(struct sk_buff *skb) ...@@ -1052,7 +1052,7 @@ int igmp6_event_query(struct sk_buff *skb)
/* clear deleted report items */ /* clear deleted report items */
mld_clear_delrec(idev); mld_clear_delrec(idev);
} else if (len >= 28) { } else if (len >= 28) {
max_delay = MLDV2_MRC(ntohs(mlh2->mrc))*(HZ/10); max_delay = (MLDV2_MRC(ntohs(mlh2->mrc))*HZ)/1000;
if (!max_delay) if (!max_delay)
max_delay = 1; max_delay = 1;
idev->mc_maxdelay = max_delay; idev->mc_maxdelay = max_delay;
......
...@@ -1670,6 +1670,7 @@ static int cbq_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new, ...@@ -1670,6 +1670,7 @@ static int cbq_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
sch_tree_lock(sch); sch_tree_lock(sch);
*old = cl->q; *old = cl->q;
cl->q = new; cl->q = new;
sch->q.qlen -= (*old)->q.qlen;
qdisc_reset(*old); qdisc_reset(*old);
sch_tree_unlock(sch); sch_tree_unlock(sch);
......
...@@ -77,6 +77,7 @@ static int dsmark_graft(struct Qdisc *sch,unsigned long arg, ...@@ -77,6 +77,7 @@ static int dsmark_graft(struct Qdisc *sch,unsigned long arg,
*old = xchg(&p->q,new); *old = xchg(&p->q,new);
if (*old) if (*old)
qdisc_reset(*old); qdisc_reset(*old);
sch->q.qlen = 0;
sch_tree_unlock(sch); /* @@@ move up ? */ sch_tree_unlock(sch); /* @@@ move up ? */
return 0; return 0;
} }
......
...@@ -47,7 +47,7 @@ bfifo_enqueue(struct sk_buff *skb, struct Qdisc* sch) ...@@ -47,7 +47,7 @@ bfifo_enqueue(struct sk_buff *skb, struct Qdisc* sch)
{ {
struct fifo_sched_data *q = (struct fifo_sched_data *)sch->data; struct fifo_sched_data *q = (struct fifo_sched_data *)sch->data;
if (sch->stats.backlog <= q->limit) { if (sch->stats.backlog + skb->len <= q->limit) {
__skb_queue_tail(&sch->q, skb); __skb_queue_tail(&sch->q, skb);
sch->stats.backlog += skb->len; sch->stats.backlog += skb->len;
sch->stats.bytes += skb->len; sch->stats.bytes += skb->len;
...@@ -108,7 +108,7 @@ pfifo_enqueue(struct sk_buff *skb, struct Qdisc* sch) ...@@ -108,7 +108,7 @@ pfifo_enqueue(struct sk_buff *skb, struct Qdisc* sch)
{ {
struct fifo_sched_data *q = (struct fifo_sched_data *)sch->data; struct fifo_sched_data *q = (struct fifo_sched_data *)sch->data;
if (sch->q.qlen <= q->limit) { if (sch->q.qlen < q->limit) {
__skb_queue_tail(&sch->q, skb); __skb_queue_tail(&sch->q, skb);
sch->stats.bytes += skb->len; sch->stats.bytes += skb->len;
sch->stats.packets++; sch->stats.packets++;
......
...@@ -275,7 +275,7 @@ pfifo_fast_enqueue(struct sk_buff *skb, struct Qdisc* qdisc) ...@@ -275,7 +275,7 @@ pfifo_fast_enqueue(struct sk_buff *skb, struct Qdisc* qdisc)
list = ((struct sk_buff_head*)qdisc->data) + list = ((struct sk_buff_head*)qdisc->data) +
prio2band[skb->priority&TC_PRIO_MAX]; prio2band[skb->priority&TC_PRIO_MAX];
if (list->qlen <= qdisc->dev->tx_queue_len) { if (list->qlen < qdisc->dev->tx_queue_len) {
__skb_queue_tail(list, skb); __skb_queue_tail(list, skb);
qdisc->q.qlen++; qdisc->q.qlen++;
qdisc->stats.bytes += skb->len; qdisc->stats.bytes += skb->len;
......
...@@ -110,7 +110,7 @@ gred_enqueue(struct sk_buff *skb, struct Qdisc* sch) ...@@ -110,7 +110,7 @@ gred_enqueue(struct sk_buff *skb, struct Qdisc* sch)
unsigned long qave=0; unsigned long qave=0;
int i=0; int i=0;
if (!t->initd && skb_queue_len(&sch->q) <= sch->dev->tx_queue_len) { if (!t->initd && skb_queue_len(&sch->q) < sch->dev->tx_queue_len) {
D2PRINTK("NO GRED Queues setup yet! Enqueued anyway\n"); D2PRINTK("NO GRED Queues setup yet! Enqueued anyway\n");
goto do_enqueue; goto do_enqueue;
} }
...@@ -175,7 +175,7 @@ gred_enqueue(struct sk_buff *skb, struct Qdisc* sch) ...@@ -175,7 +175,7 @@ gred_enqueue(struct sk_buff *skb, struct Qdisc* sch)
if ((q->qave+qave) < q->qth_min) { if ((q->qave+qave) < q->qth_min) {
q->qcount = -1; q->qcount = -1;
enqueue: enqueue:
if (q->backlog <= q->limit) { if (q->backlog + skb->len <= q->limit) {
q->backlog += skb->len; q->backlog += skb->len;
do_enqueue: do_enqueue:
__skb_queue_tail(&sch->q, skb); __skb_queue_tail(&sch->q, skb);
......
...@@ -266,6 +266,7 @@ static int prio_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new, ...@@ -266,6 +266,7 @@ static int prio_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
sch_tree_lock(sch); sch_tree_lock(sch);
*old = q->queues[band]; *old = q->queues[band];
q->queues[band] = new; q->queues[band] = new;
sch->q.qlen -= (*old)->q.qlen;
qdisc_reset(*old); qdisc_reset(*old);
sch_tree_unlock(sch); sch_tree_unlock(sch);
......
...@@ -257,7 +257,7 @@ red_enqueue(struct sk_buff *skb, struct Qdisc* sch) ...@@ -257,7 +257,7 @@ red_enqueue(struct sk_buff *skb, struct Qdisc* sch)
if (q->qave < q->qth_min) { if (q->qave < q->qth_min) {
q->qcount = -1; q->qcount = -1;
enqueue: enqueue:
if (sch->stats.backlog <= q->limit) { if (sch->stats.backlog + skb->len <= q->limit) {
__skb_queue_tail(&sch->q, skb); __skb_queue_tail(&sch->q, skb);
sch->stats.backlog += skb->len; sch->stats.backlog += skb->len;
sch->stats.bytes += skb->len; sch->stats.bytes += skb->len;
......
...@@ -268,7 +268,7 @@ static void tbf_reset(struct Qdisc* sch) ...@@ -268,7 +268,7 @@ static void tbf_reset(struct Qdisc* sch)
struct tbf_sched_data *q = (struct tbf_sched_data *)sch->data; struct tbf_sched_data *q = (struct tbf_sched_data *)sch->data;
qdisc_reset(q->qdisc); qdisc_reset(q->qdisc);
skb_queue_purge(&sch->q); sch->q.qlen = 0;
sch->stats.backlog = 0; sch->stats.backlog = 0;
PSCHED_GET_TIME(q->t_c); PSCHED_GET_TIME(q->t_c);
q->tokens = q->buffer; q->tokens = q->buffer;
...@@ -455,6 +455,8 @@ static int tbf_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new, ...@@ -455,6 +455,8 @@ static int tbf_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
sch_tree_lock(sch); sch_tree_lock(sch);
*old = xchg(&q->qdisc, new); *old = xchg(&q->qdisc, new);
qdisc_reset(*old); qdisc_reset(*old);
sch->q.qlen = 0;
sch->stats.backlog = 0;
sch_tree_unlock(sch); sch_tree_unlock(sch);
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment