xfrm_replay_notify(x, XFRM_REPLAY_UPDATE);
}
- err = x->mode->output(x, skb);
- if (err)
- goto error;
-
- err = x->type->output(x, skb);
+ err = x->outer_mode->output(x, skb);
if (err)
goto error;
spin_unlock_bh(&x->lock);
- skb_reset_network_header(skb);
+ err = x->type->output(x, skb);
+ if (err)
+ goto error_nolock;
if (!(skb->dst = dst_pop(dst))) {
err = -EHOSTUNREACH;
}
dst = skb->dst;
x = dst->xfrm;
- } while (x && (x->props.mode != XFRM_MODE_TUNNEL));
+ } while (x && !(x->outer_mode->flags & XFRM_MODE_FLAG_TUNNEL));
err = 0;