Hello! On Tue, Feb 1, 2022 at 1:14 AM David Ahern <dsahern@xxxxxxxxx> wrote: > > On 1/28/22 12:33 AM, menglong8.dong@xxxxxxxxx wrote: > > From: Menglong Dong <imagedong@xxxxxxxxxxx> > > > > Add document for following existing drop reasons: > > > > SKB_DROP_REASON_NOT_SPECIFIED > > SKB_DROP_REASON_NO_SOCKET > > SKB_DROP_REASON_PKT_TOO_SMALL > > SKB_DROP_REASON_TCP_CSUM > > SKB_DROP_REASON_SOCKET_FILTER > > SKB_DROP_REASON_UDP_CSUM > > > > Signed-off-by: Menglong Dong <imagedong@xxxxxxxxxxx> > > --- > > include/linux/skbuff.h | 12 ++++++------ > > 1 file changed, 6 insertions(+), 6 deletions(-) > > > > Reviewed-by: David Ahern <dsahern@xxxxxxxxxx> > > I'm doing the job of using kfree_skb_reason() for the TCP layer, and I have some puzzles. When collecting drop reason for tcp_v4_inbound_md5_hash() in tcp_v4_rcv(), I come up with 2 ways: First way: pass the address of reason to tcp_v4_inbound_md5_hash() like this: static bool tcp_v4_inbound_md5_hash(const struct sock *sk, const struct sk_buff *skb, - int dif, int sdif) + int dif, int sdif, + enum skb_drop_reason *reason) This can work, but many functions like tcp_v4_inbound_md5_hash() need to do such a change. Second way: introduce a 'drop_reason' field to 'struct sk_buff'. Therefore, drop reason can be set by 'skb->drop_reason = SKB_DROP_REASON_XXX' anywhere. For TCP, there are many cases where you can't get a drop reason in the place where skb is freed, so I think there needs to be a way to deeply collect drop reasons. The second can resolve this problem easily, but extra fields may have performance problems. Do you have some better ideas? Thanks! Menglong Dong