When the extension to be added is already present, the only skb field we may need to update is 'extensions': we can reorder the code and avoid a branch.
Signed-off-by: Paolo Abeni <pab...@redhat.com> --- net/core/skbuff.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/net/core/skbuff.c b/net/core/skbuff.c index e1d88762f659..38afa3ff2b44 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -5666,11 +5666,8 @@ void *skb_ext_add(struct sk_buff *skb, enum skb_ext_id id) if (!new) return NULL; - if (__skb_ext_exist(new, id)) { - if (old != new) - skb->extensions = new; + if (__skb_ext_exist(new, id)) goto set_active; - } newoff = new->chunks; } else { @@ -5684,9 +5681,9 @@ void *skb_ext_add(struct sk_buff *skb, enum skb_ext_id id) newlen = newoff + skb_ext_type_len[id]; new->chunks = newlen; new->offset[id] = newoff; - skb->extensions = new; -set_active: skb->active_extensions |= 1 << id; +set_active: + skb->extensions = new; return skb_ext_get_ptr(new, id); } EXPORT_SYMBOL(skb_ext_add); -- 2.19.2