forked from mirrors/linux
		
	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
					
				
					 1 changed files with 0 additions and 51 deletions
				
			
		| 
						 | 
				
			
			@ -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 @@ static int choke_enqueue(struct sk_buff *skb, struct Qdisc *sch,
 | 
			
		|||
	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 a new issue