diff options
Diffstat (limited to 'net/sched/sch_fq.c')
| -rw-r--r-- | net/sched/sch_fq.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/net/sched/sch_fq.c b/net/sched/sch_fq.c index a2fef8b10b96..a9dfdda9ed1d 100644 --- a/net/sched/sch_fq.c +++ b/net/sched/sch_fq.c | |||
| @@ -472,20 +472,16 @@ begin: | |||
| 472 | if (f->credit > 0 || !q->rate_enable) | 472 | if (f->credit > 0 || !q->rate_enable) |
| 473 | goto out; | 473 | goto out; |
| 474 | 474 | ||
| 475 | if (skb->sk && skb->sk->sk_state != TCP_TIME_WAIT) { | 475 | rate = q->flow_max_rate; |
| 476 | rate = skb->sk->sk_pacing_rate ?: q->flow_default_rate; | 476 | if (skb->sk && skb->sk->sk_state != TCP_TIME_WAIT) |
| 477 | rate = min(skb->sk->sk_pacing_rate, rate); | ||
| 477 | 478 | ||
| 478 | rate = min(rate, q->flow_max_rate); | 479 | if (rate != ~0U) { |
| 479 | } else { | ||
| 480 | rate = q->flow_max_rate; | ||
| 481 | if (rate == ~0U) | ||
| 482 | goto out; | ||
| 483 | } | ||
| 484 | if (rate) { | ||
| 485 | u32 plen = max(qdisc_pkt_len(skb), q->quantum); | 480 | u32 plen = max(qdisc_pkt_len(skb), q->quantum); |
| 486 | u64 len = (u64)plen * NSEC_PER_SEC; | 481 | u64 len = (u64)plen * NSEC_PER_SEC; |
| 487 | 482 | ||
| 488 | do_div(len, rate); | 483 | if (likely(rate)) |
| 484 | do_div(len, rate); | ||
| 489 | /* Since socket rate can change later, | 485 | /* Since socket rate can change later, |
| 490 | * clamp the delay to 125 ms. | 486 | * clamp the delay to 125 ms. |
| 491 | * TODO: maybe segment the too big skb, as in commit | 487 | * TODO: maybe segment the too big skb, as in commit |
| @@ -656,7 +652,7 @@ static int fq_change(struct Qdisc *sch, struct nlattr *opt) | |||
| 656 | q->quantum = nla_get_u32(tb[TCA_FQ_QUANTUM]); | 652 | q->quantum = nla_get_u32(tb[TCA_FQ_QUANTUM]); |
| 657 | 653 | ||
| 658 | if (tb[TCA_FQ_INITIAL_QUANTUM]) | 654 | if (tb[TCA_FQ_INITIAL_QUANTUM]) |
| 659 | q->quantum = nla_get_u32(tb[TCA_FQ_INITIAL_QUANTUM]); | 655 | q->initial_quantum = nla_get_u32(tb[TCA_FQ_INITIAL_QUANTUM]); |
| 660 | 656 | ||
| 661 | if (tb[TCA_FQ_FLOW_DEFAULT_RATE]) | 657 | if (tb[TCA_FQ_FLOW_DEFAULT_RATE]) |
| 662 | q->flow_default_rate = nla_get_u32(tb[TCA_FQ_FLOW_DEFAULT_RATE]); | 658 | q->flow_default_rate = nla_get_u32(tb[TCA_FQ_FLOW_DEFAULT_RATE]); |
| @@ -735,12 +731,14 @@ static int fq_dump(struct Qdisc *sch, struct sk_buff *skb) | |||
| 735 | if (opts == NULL) | 731 | if (opts == NULL) |
| 736 | goto nla_put_failure; | 732 | goto nla_put_failure; |
| 737 | 733 | ||
| 734 | /* TCA_FQ_FLOW_DEFAULT_RATE is not used anymore, | ||
| 735 | * do not bother giving its value | ||
| 736 | */ | ||
| 738 | if (nla_put_u32(skb, TCA_FQ_PLIMIT, sch->limit) || | 737 | if (nla_put_u32(skb, TCA_FQ_PLIMIT, sch->limit) || |
| 739 | nla_put_u32(skb, TCA_FQ_FLOW_PLIMIT, q->flow_plimit) || | 738 | nla_put_u32(skb, TCA_FQ_FLOW_PLIMIT, q->flow_plimit) || |
| 740 | nla_put_u32(skb, TCA_FQ_QUANTUM, q->quantum) || | 739 | nla_put_u32(skb, TCA_FQ_QUANTUM, q->quantum) || |
| 741 | nla_put_u32(skb, TCA_FQ_INITIAL_QUANTUM, q->initial_quantum) || | 740 | nla_put_u32(skb, TCA_FQ_INITIAL_QUANTUM, q->initial_quantum) || |
| 742 | nla_put_u32(skb, TCA_FQ_RATE_ENABLE, q->rate_enable) || | 741 | nla_put_u32(skb, TCA_FQ_RATE_ENABLE, q->rate_enable) || |
| 743 | nla_put_u32(skb, TCA_FQ_FLOW_DEFAULT_RATE, q->flow_default_rate) || | ||
| 744 | nla_put_u32(skb, TCA_FQ_FLOW_MAX_RATE, q->flow_max_rate) || | 742 | nla_put_u32(skb, TCA_FQ_FLOW_MAX_RATE, q->flow_max_rate) || |
| 745 | nla_put_u32(skb, TCA_FQ_BUCKETS_LOG, q->fq_trees_log)) | 743 | nla_put_u32(skb, TCA_FQ_BUCKETS_LOG, q->fq_trees_log)) |
| 746 | goto nla_put_failure; | 744 | goto nla_put_failure; |
