* @SKB_NOT_DROPPED_YET: skb is not dropped yet (used for no-drop case)
         */
        SKB_NOT_DROPPED_YET = 0,
+       /** @SKB_CONSUMED: packet has been consumed */
+       SKB_CONSUMED,
        /** @SKB_DROP_REASON_NOT_SPECIFIED: drop reason is not specified */
        SKB_DROP_REASON_NOT_SPECIFIED,
        /** @SKB_DROP_REASON_NO_SOCKET: socket not found */
 
 #undef FN
 #define FN(reason) [SKB_DROP_REASON_##reason] = #reason,
 const char * const drop_reasons[] = {
+       [SKB_CONSUMED] = "CONSUMED",
        DEFINE_DROP_REASON(FN, FN)
 };
 EXPORT_SYMBOL(drop_reasons);
 
        DEBUG_NET_WARN_ON_ONCE(reason <= 0 || reason >= SKB_DROP_REASON_MAX);
 
-       trace_kfree_skb(skb, __builtin_return_address(0), reason);
+       if (reason == SKB_CONSUMED)
+               trace_consume_skb(skb);
+       else
+               trace_kfree_skb(skb, __builtin_return_address(0), reason);
        __kfree_skb(skb);
 }
 EXPORT_SYMBOL(kfree_skb_reason);