Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f43c5a0d authored by Patrick McHardy's avatar Patrick McHardy Committed by David S. Miller
Browse files

[PKT_SCHED]: Convert tc action functions to single skb pointers



tcf_action_exec only gets a single skb pointer and doesn't own the skb,
but passes double skb pointers (to a local variable) to the action
functions. Change to use single skb pointers everywhere.

Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 538e43a4
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -63,7 +63,7 @@ struct tc_action_ops
	__u32   type; /* TBD to match kind */
	__u32 	capab;  /* capabilities includes 4 bit version */
	struct module		*owner;
	int     (*act)(struct sk_buff **, struct tc_action *, struct tcf_result *);
	int     (*act)(struct sk_buff *, struct tc_action *, struct tcf_result *);
	int     (*get_stats)(struct sk_buff *, struct tc_action *);
	int     (*dump)(struct sk_buff *, struct tc_action *,int , int);
	int     (*cleanup)(struct tc_action *, int bind);
+1 −1
Original line number Diff line number Diff line
@@ -165,7 +165,7 @@ int tcf_action_exec(struct sk_buff *skb, struct tc_action *act,
	while ((a = act) != NULL) {
repeat:
		if (a->ops && a->ops->act) {
			ret = a->ops->act(&skb, a, res);
			ret = a->ops->act(skb, a, res);
			if (TC_MUNGED & skb->tc_verd) {
				/* copied already, allow trampling */
				skb->tc_verd = SET_TC_OK2MUNGE(skb->tc_verd);
+1 −2
Original line number Diff line number Diff line
@@ -135,10 +135,9 @@ tcf_gact_cleanup(struct tc_action *a, int bind)
}

static int
tcf_gact(struct sk_buff **pskb, struct tc_action *a, struct tcf_result *res)
tcf_gact(struct sk_buff *skb, struct tc_action *a, struct tcf_result *res)
{
	struct tcf_gact *p = PRIV(a, gact);
	struct sk_buff *skb = *pskb;
	int action = TC_ACT_SHOT;

	spin_lock(&p->lock);
+4 −2
Original line number Diff line number Diff line
@@ -201,11 +201,10 @@ tcf_ipt_cleanup(struct tc_action *a, int bind)
}

static int
tcf_ipt(struct sk_buff **pskb, struct tc_action *a, struct tcf_result *res)
tcf_ipt(struct sk_buff *skb, struct tc_action *a, struct tcf_result *res)
{
	int ret = 0, result = 0;
	struct tcf_ipt *p = PRIV(a, ipt);
	struct sk_buff *skb = *pskb;

	if (skb_cloned(skb)) {
		if (pskb_expand_head(skb, 0, 0, GFP_ATOMIC))
@@ -222,6 +221,9 @@ tcf_ipt(struct sk_buff **pskb, struct tc_action *a, struct tcf_result *res)
	 worry later - danger - this API seems to have changed
	 from earlier kernels */

	/* iptables targets take a double skb pointer in case the skb
	 * needs to be replaced. We don't own the skb, so this must not
	 * happen. The pskb_expand_head above should make sure of this */
	ret = p->t->u.kernel.target->target(&skb, skb->dev, NULL,
					    p->hook, p->t->data, NULL);
	switch (ret) {
+1 −2
Original line number Diff line number Diff line
@@ -158,12 +158,11 @@ tcf_mirred_cleanup(struct tc_action *a, int bind)
}

static int
tcf_mirred(struct sk_buff **pskb, struct tc_action *a, struct tcf_result *res)
tcf_mirred(struct sk_buff *skb, struct tc_action *a, struct tcf_result *res)
{
	struct tcf_mirred *p = PRIV(a, mirred);
	struct net_device *dev;
	struct sk_buff *skb2 = NULL;
	struct sk_buff *skb = *pskb;
	u32 at = G_TC_AT(skb->tc_verd);

	spin_lock(&p->lock);
Loading