* @trap_group_name: Trap group name.
  * @input_dev: Input netdevice.
  * @fa_cookie: Flow action user cookie.
+ * @trap_type: Trap type.
  */
 struct devlink_trap_metadata {
        const char *trap_name;
        const char *trap_group_name;
        struct net_device *input_dev;
        const struct flow_action_cookie *fa_cookie;
+       enum devlink_trap_type trap_type;
 };
 
 /**
 
        metadata->trap_name = trap_item->trap->name;
        metadata->trap_group_name = trap_item->group_item->group->name;
        metadata->fa_cookie = fa_cookie;
+       metadata->trap_type = trap_item->trap->type;
 
        spin_lock(&in_devlink_port->type_lock);
        if (in_devlink_port->type == DEVLINK_PORT_TYPE_ETH)
        devlink_trap_stats_update(trap_item->stats, skb->len);
        devlink_trap_stats_update(trap_item->group_item->stats, skb->len);
 
-       /* Control packets were not dropped by the device or encountered an
-        * exception during forwarding and therefore should not be reported to
-        * the kernel's drop monitor.
-        */
-       if (trap_item->trap->type == DEVLINK_TRAP_TYPE_CONTROL)
-               return;
-
        if (trace_devlink_trap_report_enabled()) {
                struct devlink_trap_metadata metadata = {};
 
 
        unsigned long flags;
        int i;
 
+       if (metadata->trap_type == DEVLINK_TRAP_TYPE_CONTROL)
+               return;
+
        hw_data = this_cpu_ptr(&dm_hw_cpu_data);
        spin_lock_irqsave(&hw_data->lock, flags);
        hw_entries = hw_data->hw_entries;
        struct sk_buff *nskb;
        unsigned long flags;
 
+       if (metadata->trap_type == DEVLINK_TRAP_TYPE_CONTROL)
+               return;
+
        if (!skb_mac_header_was_set(skb))
                return;