@@ -2499,8 +2499,6 @@ static int pktgen_output_ipsec(struct sk_buff *skb, struct pktgen_dev *pkt_dev)
if (x->props.mode == XFRM_MODE_TUNNEL)
__skb_dst_set_noref(skb, &pkt_dev->dst, true);
- spin_lock(&x->lock);
-
err = x->outer_mode->output(x, skb);
if (err)
goto error;
@@ -2508,10 +2506,11 @@ static int pktgen_output_ipsec(struct sk_buff *skb, struct pktgen_dev *pkt_dev)
if (err)
goto error;
+ spin_lock(&x->lock);
x->curlft.bytes += skb->len;
x->curlft.packets++;
-error:
spin_unlock(&x->lock);
+error:
return err;
}
xfrm_state lock protects its state, i.e., VALID/DEAD and statistics, not the transforming procedure, as both mode/type output functions are reentrant. Signed-off-by: Fan Du <fan.du@windriver.com> --- net/core/pktgen.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)