}
 EXPORT_SYMBOL(nf_unregister_queue_handler);
 
-static void nf_queue_entry_release_br_nf_refs(struct sk_buff *skb)
-{
-#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
-       struct nf_bridge_info *nf_bridge = nf_bridge_info_get(skb);
-
-       if (nf_bridge) {
-               struct net_device *physdev;
-
-               physdev = nf_bridge_get_physindev(skb);
-               if (physdev)
-                       dev_put(physdev);
-               physdev = nf_bridge_get_physoutdev(skb);
-               if (physdev)
-                       dev_put(physdev);
-       }
-#endif
-}
-
 static void nf_queue_entry_release_refs(struct nf_queue_entry *entry)
 {
        struct nf_hook_state *state = &entry->state;
        if (state->sk)
                sock_put(state->sk);
 
-       nf_queue_entry_release_br_nf_refs(entry->skb);
+#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
+       if (entry->physin)
+               dev_put(entry->physin);
+       if (entry->physout)
+               dev_put(entry->physout);
+#endif
 }
 
 void nf_queue_entry_free(struct nf_queue_entry *entry)
 }
 EXPORT_SYMBOL_GPL(nf_queue_entry_free);
 
-static void nf_queue_entry_get_br_nf_refs(struct sk_buff *skb)
+static void __nf_queue_entry_init_physdevs(struct nf_queue_entry *entry)
 {
 #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
-       struct nf_bridge_info *nf_bridge = nf_bridge_info_get(skb);
+       const struct sk_buff *skb = entry->skb;
+       struct nf_bridge_info *nf_bridge;
 
+       nf_bridge = nf_bridge_info_get(skb);
        if (nf_bridge) {
-               struct net_device *physdev;
-
-               physdev = nf_bridge_get_physindev(skb);
-               if (physdev)
-                       dev_hold(physdev);
-               physdev = nf_bridge_get_physoutdev(skb);
-               if (physdev)
-                       dev_hold(physdev);
+               entry->physin = nf_bridge_get_physindev(skb);
+               entry->physout = nf_bridge_get_physoutdev(skb);
+       } else {
+               entry->physin = NULL;
+               entry->physout = NULL;
        }
 #endif
 }
        if (state->sk)
                sock_hold(state->sk);
 
-       nf_queue_entry_get_br_nf_refs(entry->skb);
+#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
+       if (entry->physin)
+               dev_hold(entry->physin);
+       if (entry->physout)
+               dev_hold(entry->physout);
+#endif
 }
 EXPORT_SYMBOL_GPL(nf_queue_entry_get_refs);
 
                .size   = sizeof(*entry) + route_key_size,
        };
 
+       __nf_queue_entry_init_physdevs(entry);
+
        nf_queue_entry_get_refs(entry);
 
        switch (entry->state.pf) {