On Sun, 2016-08-28 at 08:19 -0400, Jamal Hadi Salim wrote: > From: Jamal Hadi Salim <j...@mojatatu.com>
... > +static int tcf_skbmod_run(struct sk_buff *skb, const struct tc_action *a, > + struct tcf_result *res) > +{ > + struct tcf_skbmod *d = to_skbmod(a); > + > + spin_lock(&d->tcf_lock); > + tcf_lastuse_update(&d->tcf_tm); > + bstats_update(&d->tcf_bstats, skb); > + > + if (d->flags & SKBMOD_F_DMAC) > + ether_addr_copy(eth_hdr(skb)->h_dest, d->eth_dst); > + if (d->flags & SKBMOD_F_SMAC) > + ether_addr_copy(eth_hdr(skb)->h_source, d->eth_src); > + if (d->flags & SKBMOD_F_ETYPE) > + eth_hdr(skb)->h_proto = d->eth_type; > + if (d->flags & SKBMOD_F_SWAPMAC) { > + u8 tmpaddr[ETH_ALEN]; > + /*XXX: I am sure we can come up with something more efficient */ > + ether_addr_copy(tmpaddr, eth_hdr(skb)->h_dest); > + ether_addr_copy(eth_hdr(skb)->h_dest, eth_hdr(skb)->h_source); > + ether_addr_copy(eth_hdr(skb)->h_source, tmpaddr); > + } > + > + spin_unlock(&d->tcf_lock); > + return d->tcf_action; > +} Adding an action with a spinlock held in fast path in 2016 is a way to tell people : It is a toy, do not use it for real. Sorry guys. Friends do not let friends do that anymore.