mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 04:31:50 +00:00
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: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
270c7759fb
commit
5952fde10c
@ -58,7 +58,6 @@ struct choke_sched_data {
|
||||
|
||||
/* Variables */
|
||||
struct red_vars vars;
|
||||
struct tcf_proto __rcu *filter_list;
|
||||
struct {
|
||||
u32 prob_drop; /* Early probability drops */
|
||||
u32 prob_mark; /* Early probability marks */
|
||||
@ -152,11 +151,6 @@ static inline void choke_set_classid(struct sk_buff *skb, u16 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
|
||||
* Returns true only if source and destination address and port match.
|
||||
@ -187,40 +181,6 @@ static bool choke_match_flow(struct sk_buff *skb1,
|
||||
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
|
||||
* 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,
|
||||
return false;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@ -270,12 +227,6 @@ static int choke_enqueue(struct sk_buff *skb, struct Qdisc *sch,
|
||||
struct choke_sched_data *q = qdisc_priv(sch);
|
||||
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;
|
||||
/* Compute average queue usage (see RED) */
|
||||
q->vars.qavg = red_calc_qavg(p, &q->vars, sch->q.qlen);
|
||||
@ -340,7 +291,6 @@ congestion_drop:
|
||||
qdisc_drop(skb, sch, to_free);
|
||||
return NET_XMIT_CN;
|
||||
|
||||
other_drop:
|
||||
if (ret & __NET_XMIT_BYPASS)
|
||||
qdisc_qstats_drop(sch);
|
||||
__qdisc_drop(skb, to_free);
|
||||
@ -538,7 +488,6 @@ static void choke_destroy(struct Qdisc *sch)
|
||||
{
|
||||
struct choke_sched_data *q = qdisc_priv(sch);
|
||||
|
||||
tcf_destroy_chain(&q->filter_list);
|
||||
choke_free(q->tab);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user