Paolo Abeni wrote: > -static inline bool mptcp_skb_ext_exist(const struct sk_buff *skb) > +/* move the skb extension owership, with the assumption that 'to' is > + * newly allocated and 'from' carries only MPTCP ext > + */ > +static inline void mptcp_skb_ext_move(struct sk_buff *to, > + struct sk_buff *from) > +{ > + if (WARN_ON_ONCE(to->active_extensions)) > + skb_ext_put(to); > + WARN_ON_ONCE(from->active_extensions & ~(1 << SKB_EXT_MPTCP)); This warn is triggered for skb that came in via a bridge. I do not think you need the 2nd WARN. > + to->active_extensions = from->active_extensions; > + to->extensions = from->extensions; > + from->extensions = NULL; This NULL assignment isn't needed -- if it is, something else is broken. Rest looks good -- I agree that sk_is_mptcp() check could be used as you pointed out in your reply to Christoph. Thanks for working on this.