Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 277999
b: refs/heads/master
c: a00bd46
h: refs/heads/master
i:
  277997: f6dd0f3
  277995: 38bb23d
  277991: a2e077a
  277983: c87c7c6
v: v3
  • Loading branch information
Eric Dumazet authored and David S. Miller committed Nov 29, 2011
1 parent 496eb7b commit ded7090
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 4 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 6bd2a9af17cc3b153de45390b54c7d64a773beee
refs/heads/master: a00bd469b6604aa5f165dcc4d07dc07499439a6b
17 changes: 14 additions & 3 deletions trunk/net/sched/sch_sfb.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#include <net/ip.h>
#include <net/pkt_sched.h>
#include <net/inet_ecn.h>
#include <net/flow_keys.h>

/*
* SFB uses two B[l][n] : L x N arrays of bins (L levels, N bins per level)
Expand Down Expand Up @@ -286,6 +287,7 @@ static int sfb_enqueue(struct sk_buff *skb, struct Qdisc *sch)
u32 minqlen = ~0;
u32 r, slot, salt, sfbhash;
int ret = NET_XMIT_SUCCESS | __NET_XMIT_BYPASS;
struct flow_keys keys;

if (unlikely(sch->q.qlen >= q->limit)) {
sch->qstats.overlimits++;
Expand All @@ -309,13 +311,19 @@ static int sfb_enqueue(struct sk_buff *skb, struct Qdisc *sch)
/* If using external classifiers, get result and record it. */
if (!sfb_classify(skb, q, &ret, &salt))
goto other_drop;
keys.src = salt;
keys.dst = 0;
keys.ports = 0;
} else {
salt = skb_get_rxhash(skb);
skb_flow_dissect(skb, &keys);
}

slot = q->slot;

sfbhash = jhash_1word(salt, q->bins[slot].perturbation);
sfbhash = jhash_3words((__force u32)keys.dst,
(__force u32)keys.src,
(__force u32)keys.ports,
q->bins[slot].perturbation);
if (!sfbhash)
sfbhash = 1;
sfb_skb_cb(skb)->hashes[slot] = sfbhash;
Expand Down Expand Up @@ -347,7 +355,10 @@ static int sfb_enqueue(struct sk_buff *skb, struct Qdisc *sch)
if (unlikely(p_min >= SFB_MAX_PROB)) {
/* Inelastic flow */
if (q->double_buffering) {
sfbhash = jhash_1word(salt, q->bins[slot].perturbation);
sfbhash = jhash_3words((__force u32)keys.dst,
(__force u32)keys.src,
(__force u32)keys.ports,
q->bins[slot].perturbation);
if (!sfbhash)
sfbhash = 1;
sfb_skb_cb(skb)->hashes[slot] = sfbhash;
Expand Down

0 comments on commit ded7090

Please sign in to comment.