Commit 2dc4e9e8 authored by Paul Blakey's avatar Paul Blakey Committed by David S. Miller
Browse files

net/sched: act_ct: Fix byte count on fragmented packets



First fragmented packets (frag offset = 0) byte len is zeroed
when stolen by ip_defrag(). And since act_ct update the stats
only afterwards (at end of execute), bytes aren't correctly
accounted for such packets.

To fix this, move stats update to start of action execute.

Fixes: b57dc7c1 ("net/sched: Introduce action ct")
Signed-off-by: default avatarPaul Blakey <paulb@nvidia.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 342afce1
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -960,6 +960,7 @@ static int tcf_ct_act(struct sk_buff *skb, const struct tc_action *a,
	tmpl = p->tmpl;

	tcf_lastuse_update(&c->tcf_tm);
	tcf_action_update_bstats(&c->common, skb);

	if (clear) {
		qdisc_skb_cb(skb)->post_ct = false;
@@ -1049,7 +1050,6 @@ static int tcf_ct_act(struct sk_buff *skb, const struct tc_action *a,

	qdisc_skb_cb(skb)->post_ct = true;
out_clear:
	tcf_action_update_bstats(&c->common, skb);
	if (defrag)
		qdisc_skb_cb(skb)->pkt_len = skb->len;
	return retval;