sfq: whitespace cleanup
Subsystems (3)
PATCH 3/3 sfq: whitespace cleanup
In reply to a message not in the archiveAdd whitespace around operators, and add a few blank lines to improve readability.
net/sched/sch_sfq.c +25 -17
@@ -122,7 +122,7 @@ static unsigned sfq_hash(struct sfq_sche {const struct iphdr *iph =ip_hdr (skb); h = iph->daddr; - h2 = iph->saddr^iph->protocol; + h2 = iph->saddr ^ iph->protocol; if (!(iph->frag_off&htons(IP_MF|IP_OFFSET)) && (iph->protocol == IPPROTO_TCP || iph->protocol == IPPROTO_UDP ||
@@ -137,7 +137,7 @@ static unsigned sfq_hash(struct sfq_sche {struct ipv6hdr *iph =ipv6_hdr (skb); h = iph->daddr.s6_addr32[3 ]; - h2 = iph->saddr.s6_addr32[3 ]^iph->nexthdr; + h2 = iph->saddr.s6_addr32[3 ] ^ iph->nexthdr; if (iph->nexthdr == IPPROTO_TCP || iph->nexthdr == IPPROTO_UDP || iph->nexthdr == IPPROTO_UDPLITE ||
@@ -148,9 +148,10 @@ static unsigned sfq_hash(struct sfq_schebreak ; }default : - h = (u32 )(unsigned long )skb->dst^skb->protocol; - h2 = (u32 )(unsigned long )skb->sk; + h = (unsigned long )skb->dst ^ skb->protocol; + h2 = (unsigned long )skb->sk; } +return sfq_fold_hash (q, h, h2); }
@@ -208,7 +209,7 @@ static unsigned int sfq_drop(struct Qdisdrop a packet from it */ if (d >1 ) { -sfq_index x = q->dep[d+SFQ_DEPTH ].next; +sfq_index x = q->dep[d +SFQ_DEPTH ].next; skb = q->qs[x].prev; len = skb->len;__skb_unlink (skb, &q->qs[x]);
@@ -241,7 +242,7 @@ static unsigned int sfq_drop(struct Qdis }static int -sfq_enqueue (struct sk_buff *skb,struct Qdisc * sch) +sfq_enqueue (struct sk_buff *skb,struct Qdisc *sch) {struct sfq_sched_data *q =qdisc_priv (sch);unsigned hash =sfq_hash (q, skb);
@@ -252,6 +253,7 @@ sfq_enqueue(struct sk_buff *skb, struct q->ht[hash] = x = q->dep[SFQ_DEPTH ].next; q->hash[x] = hash; } +/* If selected queue has length q->limit, this means that * all another queues are empty and that we do simple tail drop, * i.e. drop _this_ packet.
@@ -284,7 +286,7 @@ sfq_enqueue(struct sk_buff *skb, struct }static int -sfq_requeue (struct sk_buff *skb,struct Qdisc * sch) +sfq_requeue (struct sk_buff *skb,struct Qdisc *sch) {struct sfq_sched_data *q =qdisc_priv (sch);unsigned hash =sfq_hash (q, skb);
@@ -295,6 +297,7 @@ sfq_requeue(struct sk_buff *skb, struct q->ht[hash] = x = q->dep[SFQ_DEPTH ].next; q->hash[x] = hash; } + sch->qstats.backlog += skb->len;__skb_queue_head (&q->qs[x], skb);/* If selected queue has length q->limit+1, this means that
@@ -310,6 +313,7 @@ sfq_requeue(struct sk_buff *skb, structkfree_skb (skb);return NET_XMIT_CN ; } +sfq_inc (q, x);if (q->qs[x].qlen ==1 ) {/* The flow is new */ if (q->tail ==SFQ_DEPTH ) {/* It is the first flow */
@@ -322,6 +326,7 @@ sfq_requeue(struct sk_buff *skb, struct q->tail = x; } } +if (++sch->q.qlen <= q->limit) { sch->qstats.requeues++;return 0 ;
@@ -336,7 +341,7 @@ sfq_requeue(struct sk_buff *skb, structstatic struct sk_buff * -sfq_dequeue (struct Qdisc * sch) +sfq_dequeue (struct Qdisc *sch) {struct sfq_sched_data *q =qdisc_priv (sch);struct sk_buff *skb;
@@ -373,7 +378,7 @@ sfq_dequeue(struct Qdisc* sch) }static void -sfq_reset (struct Qdisc * sch) +sfq_reset (struct Qdisc *sch) {struct sk_buff *skb;
@@ -383,7 +388,7 @@ sfq_reset(struct Qdisc* sch)static void sfq_perturbation (unsigned long arg) { -struct Qdisc *sch = (struct Qdisc *)arg; +struct Qdisc *sch = (struct Qdisc *)arg;struct sfq_sched_data *q =qdisc_priv (sch); q->perturbation =net_random ();
@@ -403,7 +408,7 @@ static int sfq_change(struct Qdisc *sch,sch_tree_lock (sch); q->quantum = ctl->quantum ? :psched_mtu (sch->dev); - q->perturb_period = ctl->perturb_period*HZ ; + q->perturb_period = ctl->perturb_period *HZ ;if (ctl->limit) q->limit =min_t (u32, ctl->limit,SFQ_DEPTH -1 );
@@ -430,13 +435,15 @@ static int sfq_init(struct Qdisc *sch, s timer->data = (unsigned long )sch;;init_timer_deferrable (&q->perturb_timer); -for (i=0 ; i<SFQ_HASH_DIVISOR ; i++) +for (i =0 ; i <SFQ_HASH_DIVISOR ; i++) q->ht[i] =SFQ_DEPTH ; -for (i=0 ; i<SFQ_DEPTH ; i++) { + +for (i =0 ; i <SFQ_DEPTH ; i++) {skb_queue_head_init (&q->qs[i]); - q->dep[i+SFQ_DEPTH ].next = i+SFQ_DEPTH ; - q->dep[i+SFQ_DEPTH ].prev = i+SFQ_DEPTH ; + q->dep[i +SFQ_DEPTH ].next = i +SFQ_DEPTH ; + q->dep[i +SFQ_DEPTH ].prev = i +SFQ_DEPTH ; } + q->limit =SFQ_DEPTH -1 ; q->max_depth =0 ; q->tail =SFQ_DEPTH ;
@@ -449,7 +456,8 @@ static int sfq_init(struct Qdisc *sch, sif (err)return err; } -for (i=0 ; i<SFQ_DEPTH ; i++) + +for (i =0 ; i <SFQ_DEPTH ; i++)sfq_link (q, i);return 0 ; }
@@ -467,7 +475,7 @@ static int sfq_dump(struct Qdisc *sch, sstruct tc_sfq_qopt opt; opt.quantum = q->quantum; - opt.perturb_period = q->perturb_period/HZ ; + opt.perturb_period = q->perturb_period /HZ ; opt.limit = q->limit; opt.divisor =SFQ_HASH_DIVISOR ;
Paul E. McKenney
Acked-byRe: [PATCH 2/2] SFQ: use net_random
In reply to a message not in the archiveQuoted 3 lines · Stephen Hemminger
SFQ doesn't need true random numbers, it is only using them to salt a hash. Therefore it is better to use
net_random()and avoid any possible problems with depleting the entropy pool.
The random-number algorithm used by net_random() certainly does appear to be considerably stronger than the one I used to generate the results in the 1990 paper. ;-)
Quoted 32 lines
Signed-off-by Stephen Hemminger <[email protected]>net/sched/sch_sfq.c +3
-3@@ -386,7 +386,7 @@ static void sfq_perturbation(unsigned lostruct Qdisc *sch = (struct Qdisc *)arg;struct sfq_sched_data *q =qdisc_priv (sch); -get_random_bytes (&q->perturbation,4 ); + q->perturbation =net_random ();if (q->perturb_period)mod_timer (&q->perturb_timer, jiffies + q->perturb_period);@@ -415,7 +415,7 @@ static int sfq_change(struct Qdisc *sch,del_timer (&q->perturb_timer);if (q->perturb_period) {mod_timer (&q->perturb_timer, jiffies + q->perturb_period); -get_random_bytes (&q->perturbation,4 ); + q->perturbation =net_random (); }sch_tree_unlock (sch);return 0 ;@@ -443,7 +443,7 @@ static int sfq_init(struct Qdisc *sch, sif (opt ==NULL ) { q->quantum =psched_mtu (sch->dev); q->perturb_period =0 ; -get_random_bytes (&q->perturbation,4 ); + q->perturbation =net_random (); }else {int err =sfq_change (sch, opt);if (err)
David Miller
maintainerRe: [PATCH 2/2] SFQ: use net_random
From: "Paul E. McKenney" <[email protected]>
Date: Fri, 18 Jan 2008 20:18:20 -0800
Quoted 10 lines · Stephen Hemminger
Quoted 3 lines
SFQ doesn't need true random numbers, it is only using them to salt a hash. Therefore it is better to use
net_random()and avoid any possible problems with depleting the entropy pool.The random-number algorithm used by
net_random()certainly does appear to be considerably stronger than the one I used to generate the results in the 1990 paper. ;-)Acked-by Paul E. McKenney <[email protected]>
Also applied, thanks.
From: Stephen Hemminger <[email protected]>
Date: Fri, 18 Jan 2008 14:48:37 -0800
Quoted 4 lines
Add whitespace around operators, and add a few blank lines to improve readability.
Signed-off-by Stephen Hemminger <[email protected]>
Applied.