Commit 5952fde1 authored by Jiri Pirko's avatar Jiri Pirko Committed by David S. Miller

net: sched: choke: remove dead filter classify code

sch_choke is classless qdisc so it does not define cl_ops. Therefore
filter_list cannot be ever changed, being NULL all the time.
Reason is this check in tc_ctl_tfilter:

	/* Is it classful? */
	cops = q->ops->cl_ops;
	if (!cops)
		return -EINVAL;

So remove this dead code.
Signed-off-by: default avatarJiri Pirko <jiri@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 270c7759
...@@ -58,7 +58,6 @@ struct choke_sched_data { ...@@ -58,7 +58,6 @@ struct choke_sched_data {
/* Variables */ /* Variables */
struct red_vars vars; struct red_vars vars;
struct tcf_proto __rcu *filter_list;
struct { struct {
u32 prob_drop; /* Early probability drops */ u32 prob_drop; /* Early probability drops */
u32 prob_mark; /* Early probability marks */ u32 prob_mark; /* Early probability marks */
...@@ -152,11 +151,6 @@ static inline void choke_set_classid(struct sk_buff *skb, u16 classid) ...@@ -152,11 +151,6 @@ static inline void choke_set_classid(struct sk_buff *skb, u16 classid)
choke_skb_cb(skb)->classid = classid; choke_skb_cb(skb)->classid = classid;
} }
static u16 choke_get_classid(const struct sk_buff *skb)
{
return choke_skb_cb(skb)->classid;
}
/* /*
* Compare flow of two packets * Compare flow of two packets
* Returns true only if source and destination address and port match. * Returns true only if source and destination address and port match.
...@@ -187,40 +181,6 @@ static bool choke_match_flow(struct sk_buff *skb1, ...@@ -187,40 +181,6 @@ static bool choke_match_flow(struct sk_buff *skb1,
sizeof(choke_skb_cb(skb1)->keys)); sizeof(choke_skb_cb(skb1)->keys));
} }
/*
* Classify flow using either:
* 1. pre-existing classification result in skb
* 2. fast internal classification
* 3. use TC filter based classification
*/
static bool choke_classify(struct sk_buff *skb,
struct Qdisc *sch, int *qerr)
{
struct choke_sched_data *q = qdisc_priv(sch);
struct tcf_result res;
struct tcf_proto *fl;
int result;
fl = rcu_dereference_bh(q->filter_list);
result = tc_classify(skb, fl, &res, false);
if (result >= 0) {
#ifdef CONFIG_NET_CLS_ACT
switch (result) {
case TC_ACT_STOLEN:
case TC_ACT_QUEUED:
*qerr = NET_XMIT_SUCCESS | __NET_XMIT_STOLEN;
case TC_ACT_SHOT:
return false;
}
#endif
choke_set_classid(skb, TC_H_MIN(res.classid));
return true;
}
return false;
}
/* /*
* Select a packet at random from queue * Select a packet at random from queue
* HACK: since queue can have holes from previous deletion; retry several * HACK: since queue can have holes from previous deletion; retry several
...@@ -257,9 +217,6 @@ static bool choke_match_random(const struct choke_sched_data *q, ...@@ -257,9 +217,6 @@ static bool choke_match_random(const struct choke_sched_data *q,
return false; return false;
oskb = choke_peek_random(q, pidx); oskb = choke_peek_random(q, pidx);
if (rcu_access_pointer(q->filter_list))
return choke_get_classid(nskb) == choke_get_classid(oskb);
return choke_match_flow(oskb, nskb); return choke_match_flow(oskb, nskb);
} }
...@@ -270,12 +227,6 @@ static int choke_enqueue(struct sk_buff *skb, struct Qdisc *sch, ...@@ -270,12 +227,6 @@ static int choke_enqueue(struct sk_buff *skb, struct Qdisc *sch,
struct choke_sched_data *q = qdisc_priv(sch); struct choke_sched_data *q = qdisc_priv(sch);
const struct red_parms *p = &q->parms; const struct red_parms *p = &q->parms;
if (rcu_access_pointer(q->filter_list)) {
/* If using external classifiers, get result and record it. */
if (!choke_classify(skb, sch, &ret))
goto other_drop; /* Packet was eaten by filter */
}
choke_skb_cb(skb)->keys_valid = 0; choke_skb_cb(skb)->keys_valid = 0;
/* Compute average queue usage (see RED) */ /* Compute average queue usage (see RED) */
q->vars.qavg = red_calc_qavg(p, &q->vars, sch->q.qlen); q->vars.qavg = red_calc_qavg(p, &q->vars, sch->q.qlen);
...@@ -340,7 +291,6 @@ static int choke_enqueue(struct sk_buff *skb, struct Qdisc *sch, ...@@ -340,7 +291,6 @@ static int choke_enqueue(struct sk_buff *skb, struct Qdisc *sch,
qdisc_drop(skb, sch, to_free); qdisc_drop(skb, sch, to_free);
return NET_XMIT_CN; return NET_XMIT_CN;
other_drop:
if (ret & __NET_XMIT_BYPASS) if (ret & __NET_XMIT_BYPASS)
qdisc_qstats_drop(sch); qdisc_qstats_drop(sch);
__qdisc_drop(skb, to_free); __qdisc_drop(skb, to_free);
...@@ -538,7 +488,6 @@ static void choke_destroy(struct Qdisc *sch) ...@@ -538,7 +488,6 @@ static void choke_destroy(struct Qdisc *sch)
{ {
struct choke_sched_data *q = qdisc_priv(sch); struct choke_sched_data *q = qdisc_priv(sch);
tcf_destroy_chain(&q->filter_list);
choke_free(q->tab); choke_free(q->tab);
} }
......
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