Message ID | 20220303174707.40431-3-imagedong@tencent.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: dev: add skb drop reasons to net/core/dev.c | expand |
Hi Menglong, I am going to send another v5 soon which introduces kfree_skb_list_reason() as well. https://lore.kernel.org/all/20220226084929.6417-2-dongli.zhang@oracle.com/ I will need to make it inline as suggested by Jakub. Not sure how to handle such scenario :) Thank you very much! Dongli Zhang On 3/3/22 9:47 AM, menglong8.dong@gmail.com wrote: > From: Menglong Dong <imagedong@tencent.com> > > To report reasons of skb drops, introduce the function > kfree_skb_list_reason() and make kfree_skb_list() an inline call to > it. This function will be used in the next commit in > __dev_xmit_skb(). > > Signed-off-by: Menglong Dong <imagedong@tencent.com> > --- > include/linux/skbuff.h | 8 +++++++- > net/core/skbuff.c | 7 ++++--- > 2 files changed, 11 insertions(+), 4 deletions(-) > > diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h > index ebd18850b63e..e344603aecc4 100644 > --- a/include/linux/skbuff.h > +++ b/include/linux/skbuff.h > @@ -1194,10 +1194,16 @@ static inline void kfree_skb(struct sk_buff *skb) > } > > void skb_release_head_state(struct sk_buff *skb); > -void kfree_skb_list(struct sk_buff *segs); > +void kfree_skb_list_reason(struct sk_buff *segs, > + enum skb_drop_reason reason); > void skb_dump(const char *level, const struct sk_buff *skb, bool full_pkt); > void skb_tx_error(struct sk_buff *skb); > > +static inline void kfree_skb_list(struct sk_buff *segs) > +{ > + kfree_skb_list_reason(segs, SKB_DROP_REASON_NOT_SPECIFIED); > +} > + > #ifdef CONFIG_TRACEPOINTS > void consume_skb(struct sk_buff *skb); > #else > diff --git a/net/core/skbuff.c b/net/core/skbuff.c > index b32c5d782fe1..46d7dea78011 100644 > --- a/net/core/skbuff.c > +++ b/net/core/skbuff.c > @@ -777,16 +777,17 @@ void kfree_skb_reason(struct sk_buff *skb, enum skb_drop_reason reason) > } > EXPORT_SYMBOL(kfree_skb_reason); > > -void kfree_skb_list(struct sk_buff *segs) > +void kfree_skb_list_reason(struct sk_buff *segs, > + enum skb_drop_reason reason) > { > while (segs) { > struct sk_buff *next = segs->next; > > - kfree_skb(segs); > + kfree_skb_reason(segs, reason); > segs = next; > } > } > -EXPORT_SYMBOL(kfree_skb_list); > +EXPORT_SYMBOL(kfree_skb_list_reason); > > /* Dump skb information and contents. > * >
On Thu, 3 Mar 2022 16:12:05 -0800 Dongli Zhang wrote: > I am going to send another v5 soon which introduces kfree_skb_list_reason() as well. > > https://lore.kernel.org/all/20220226084929.6417-2-dongli.zhang@oracle.com/ > > I will need to make it inline as suggested by Jakub. > > Not sure how to handle such scenario :) Probably nothing we can do about that :( I'd say proceed as if the other series didn't exist, and after one series is merged the author of the other one will have to rebase.
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index ebd18850b63e..e344603aecc4 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -1194,10 +1194,16 @@ static inline void kfree_skb(struct sk_buff *skb) } void skb_release_head_state(struct sk_buff *skb); -void kfree_skb_list(struct sk_buff *segs); +void kfree_skb_list_reason(struct sk_buff *segs, + enum skb_drop_reason reason); void skb_dump(const char *level, const struct sk_buff *skb, bool full_pkt); void skb_tx_error(struct sk_buff *skb); +static inline void kfree_skb_list(struct sk_buff *segs) +{ + kfree_skb_list_reason(segs, SKB_DROP_REASON_NOT_SPECIFIED); +} + #ifdef CONFIG_TRACEPOINTS void consume_skb(struct sk_buff *skb); #else diff --git a/net/core/skbuff.c b/net/core/skbuff.c index b32c5d782fe1..46d7dea78011 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -777,16 +777,17 @@ void kfree_skb_reason(struct sk_buff *skb, enum skb_drop_reason reason) } EXPORT_SYMBOL(kfree_skb_reason); -void kfree_skb_list(struct sk_buff *segs) +void kfree_skb_list_reason(struct sk_buff *segs, + enum skb_drop_reason reason) { while (segs) { struct sk_buff *next = segs->next; - kfree_skb(segs); + kfree_skb_reason(segs, reason); segs = next; } } -EXPORT_SYMBOL(kfree_skb_list); +EXPORT_SYMBOL(kfree_skb_list_reason); /* Dump skb information and contents. *