--- zzzz-none-000/linux-5.4.213/net/netfilter/nft_flow_offload.c 2022-09-15 10:04:56.000000000 +0000 +++ miami-7690-761/linux-5.4.213/net/netfilter/nft_flow_offload.c 2024-05-29 11:20:02.000000000 +0000 @@ -128,6 +128,9 @@ if (ret < 0) goto err_flow_add; + if (flowtable->flags & NF_FLOWTABLE_F_HW) + nf_flow_offload_hw_add(nft_net(pkt), flow, ct); + dst_release(route.tuple[!dir].dst); return; @@ -234,47 +237,14 @@ .owner = THIS_MODULE, }; -static int flow_offload_netdev_event(struct notifier_block *this, - unsigned long event, void *ptr) -{ - struct net_device *dev = netdev_notifier_info_to_dev(ptr); - - if (event != NETDEV_DOWN) - return NOTIFY_DONE; - - nf_flow_table_cleanup(dev); - - return NOTIFY_DONE; -} - -static struct notifier_block flow_offload_netdev_notifier = { - .notifier_call = flow_offload_netdev_event, -}; - static int __init nft_flow_offload_module_init(void) { - int err; - - err = register_netdevice_notifier(&flow_offload_netdev_notifier); - if (err) - goto err; - - err = nft_register_expr(&nft_flow_offload_type); - if (err < 0) - goto register_expr; - - return 0; - -register_expr: - unregister_netdevice_notifier(&flow_offload_netdev_notifier); -err: - return err; + return nft_register_expr(&nft_flow_offload_type); } static void __exit nft_flow_offload_module_exit(void) { nft_unregister_expr(&nft_flow_offload_type); - unregister_netdevice_notifier(&flow_offload_netdev_notifier); } module_init(nft_flow_offload_module_init);