Message ID | 5957a293eadac6403657d079ddc6e360cd3f0895.1666034595.git.lucien.xin@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: add helper support in tc act_ct for ovs offloading | expand |
Hi Xin, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on net-next/master] url: https://github.com/intel-lab-lkp/linux/commits/Xin-Long/net-add-helper-support-in-tc-act_ct-for-ovs-offloading/20221018-033308 patch link: https://lore.kernel.org/r/5957a293eadac6403657d079ddc6e360cd3f0895.1666034595.git.lucien.xin%40gmail.com patch subject: [PATCH net-next 2/4] net: move add ct helper function to nf_conntrack_helper for ovs and tc config: x86_64-randconfig-c002-20221017 compiler: gcc-11 (Debian 11.3.0-8) 11.3.0 reproduce (this is a W=1 build): # https://github.com/intel-lab-lkp/linux/commit/b3a27f00504b57dc9a4c585494314b47398e7bb0 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Xin-Long/net-add-helper-support-in-tc-act_ct-for-ovs-offloading/20221018-033308 git checkout b3a27f00504b57dc9a4c585494314b47398e7bb0 # save the config file mkdir build_dir && cp config build_dir/.config make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash net/netfilter/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): net/netfilter/nf_conntrack_helper.c: In function 'nf_ct_add_helper': >> net/netfilter/nf_conntrack_helper.c:319:13: warning: unused variable 'err' [-Wunused-variable] 319 | int err; | ^~~ vim +/err +319 net/netfilter/nf_conntrack_helper.c 313 314 int nf_ct_add_helper(struct nf_conn *ct, const char *name, u8 family, 315 u8 proto, bool nat, struct nf_conntrack_helper **hp) 316 { 317 struct nf_conntrack_helper *helper; 318 struct nf_conn_help *help; > 319 int err; 320 321 helper = nf_conntrack_helper_try_module_get(name, family, proto); 322 if (!helper) 323 return -EINVAL; 324 325 help = nf_ct_helper_ext_add(ct, GFP_KERNEL); 326 if (!help) { 327 nf_conntrack_helper_put(helper); 328 return -ENOMEM; 329 } 330 #if IS_ENABLED(CONFIG_NF_NAT) 331 if (nat) { 332 err = nf_nat_helper_try_module_get(name, family, proto); 333 if (err) { 334 nf_conntrack_helper_put(helper); 335 return err; 336 } 337 } 338 #endif 339 rcu_assign_pointer(help->helper, helper); 340 *hp = helper; 341 return 0; 342 } 343 EXPORT_SYMBOL_GPL(nf_ct_add_helper); 344
diff --git a/include/net/netfilter/nf_conntrack_helper.h b/include/net/netfilter/nf_conntrack_helper.h index 6c32e59fc16f..ad1adbfbeee2 100644 --- a/include/net/netfilter/nf_conntrack_helper.h +++ b/include/net/netfilter/nf_conntrack_helper.h @@ -116,6 +116,8 @@ int __nf_ct_try_assign_helper(struct nf_conn *ct, struct nf_conn *tmpl, gfp_t flags); int nf_ct_helper(struct sk_buff *skb, u16 proto); +int nf_ct_add_helper(struct nf_conn *ct, const char *name, u8 family, + u8 proto, bool nat, struct nf_conntrack_helper **hp); void nf_ct_helper_destroy(struct nf_conn *ct); diff --git a/net/netfilter/nf_conntrack_helper.c b/net/netfilter/nf_conntrack_helper.c index 83615e479f87..ee22b8a059cd 100644 --- a/net/netfilter/nf_conntrack_helper.c +++ b/net/netfilter/nf_conntrack_helper.c @@ -311,6 +311,37 @@ int nf_ct_helper(struct sk_buff *skb, u16 proto) } EXPORT_SYMBOL_GPL(nf_ct_helper); +int nf_ct_add_helper(struct nf_conn *ct, const char *name, u8 family, + u8 proto, bool nat, struct nf_conntrack_helper **hp) +{ + struct nf_conntrack_helper *helper; + struct nf_conn_help *help; + int err; + + helper = nf_conntrack_helper_try_module_get(name, family, proto); + if (!helper) + return -EINVAL; + + help = nf_ct_helper_ext_add(ct, GFP_KERNEL); + if (!help) { + nf_conntrack_helper_put(helper); + return -ENOMEM; + } +#if IS_ENABLED(CONFIG_NF_NAT) + if (nat) { + err = nf_nat_helper_try_module_get(name, family, proto); + if (err) { + nf_conntrack_helper_put(helper); + return err; + } + } +#endif + rcu_assign_pointer(help->helper, helper); + *hp = helper; + return 0; +} +EXPORT_SYMBOL_GPL(nf_ct_add_helper); + /* appropriate ct lock protecting must be taken by caller */ static int unhelp(struct nf_conn *ct, void *me) { diff --git a/net/openvswitch/conntrack.c b/net/openvswitch/conntrack.c index 19b5c54615c8..d37011e678c2 100644 --- a/net/openvswitch/conntrack.c +++ b/net/openvswitch/conntrack.c @@ -1291,43 +1291,6 @@ int ovs_ct_clear(struct sk_buff *skb, struct sw_flow_key *key) return 0; } -static int ovs_ct_add_helper(struct ovs_conntrack_info *info, const char *name, - const struct sw_flow_key *key, bool log) -{ - struct nf_conntrack_helper *helper; - struct nf_conn_help *help; - int ret = 0; - - helper = nf_conntrack_helper_try_module_get(name, info->family, - key->ip.proto); - if (!helper) { - OVS_NLERR(log, "Unknown helper \"%s\"", name); - return -EINVAL; - } - - help = nf_ct_helper_ext_add(info->ct, GFP_KERNEL); - if (!help) { - nf_conntrack_helper_put(helper); - return -ENOMEM; - } - -#if IS_ENABLED(CONFIG_NF_NAT) - if (info->nat) { - ret = nf_nat_helper_try_module_get(name, info->family, - key->ip.proto); - if (ret) { - nf_conntrack_helper_put(helper); - OVS_NLERR(log, "Failed to load \"%s\" NAT helper, error: %d", - name, ret); - return ret; - } - } -#endif - rcu_assign_pointer(help->helper, helper); - info->helper = helper; - return ret; -} - #if IS_ENABLED(CONFIG_NF_NAT) static int parse_nat(const struct nlattr *attr, struct ovs_conntrack_info *info, bool log) @@ -1661,9 +1624,12 @@ int ovs_ct_copy_action(struct net *net, const struct nlattr *attr, } if (helper) { - err = ovs_ct_add_helper(&ct_info, helper, key, log); - if (err) + err = nf_ct_add_helper(ct_info.ct, helper, ct_info.family, + key->ip.proto, ct_info.nat, &ct_info.helper); + if (err) { + OVS_NLERR(log, "Failed to add %s helper %d", helper, err); goto err_free_ct; + } } err = ovs_nla_add_action(sfa, OVS_ACTION_ATTR_CT, &ct_info,
Move ovs_ct_add_helper from openvswitch to nf_conntrack_helper and rename as nf_ct_add_helper, so that it can be used in TC act_ct in the next patch. Signed-off-by: Xin Long <lucien.xin@gmail.com> --- include/net/netfilter/nf_conntrack_helper.h | 2 + net/netfilter/nf_conntrack_helper.c | 31 +++++++++++++++ net/openvswitch/conntrack.c | 44 +++------------------ 3 files changed, 38 insertions(+), 39 deletions(-)