Hi Harsha, Thank you for the patch! Yet something to improve: [auto build test ERROR on nf/master] [also build test ERROR on v4.16-rc7] [cannot apply to nf-next/master next-20180329] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Harsha-Sharma/netfilter-nft_ct-add-ct-timeout-support/20180401-070944 base: https://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf.git master config: i386-randconfig-x073-201813 (attached as .config) compiler: gcc-7 (Debian 7.3.0-1) 7.3.0 reproduce: # save the attached .config to linux build tree make ARCH=i386 All error/warnings (new ones prefixed by >>): In file included from include/linux/kernel.h:10:0, from net//netfilter/nft_ct.c:12: net//netfilter/nft_ct.c: In function 'ctnl_timeout_parse_policy': >> net//netfilter/nft_ct.c:743:22: error: 'const struct nf_conntrack_l4proto' has no member named 'ctnl_timeout'; did you mean 'get_timeouts'? if (likely(l4proto->ctnl_timeout.nlattr_to_obj)) { ^ include/linux/compiler.h:76:40: note: in definition of macro 'likely' # define likely(x) __builtin_expect(!!(x), 1) ^ net//netfilter/nft_ct.c:744:30: error: 'const struct nf_conntrack_l4proto' has no member named 'ctnl_timeout'; did you mean 'get_timeouts'? struct nlattr *tb[l4proto->ctnl_timeout.nlattr_max + 1]; ^~~~~~~~~~~~ get_timeouts net//netfilter/nft_ct.c:746:39: error: 'const struct nf_conntrack_l4proto' has no member named 'ctnl_timeout'; did you mean 'get_timeouts'? ret = nla_parse_nested(tb, l4proto->ctnl_timeout.nlattr_max, ^~~~~~~~~~~~ get_timeouts net//netfilter/nft_ct.c:747:27: error: 'const struct nf_conntrack_l4proto' has no member named 'ctnl_timeout'; did you mean 'get_timeouts'? attr, l4proto->ctnl_timeout.nla_policy, ^~~~~~~~~~~~ get_timeouts net//netfilter/nft_ct.c:752:18: error: 'const struct nf_conntrack_l4proto' has no member named 'ctnl_timeout'; did you mean 'get_timeouts'? ret = l4proto->ctnl_timeout.nlattr_to_obj(tb, net, timeouts); ^~~~~~~~~~~~ get_timeouts net//netfilter/nft_ct.c:744:18: warning: unused variable 'tb' [-Wunused-variable] struct nlattr *tb[l4proto->ctnl_timeout.nlattr_max + 1]; ^~ net//netfilter/nft_ct.c: In function 'nft_ct_timeout_obj_init': >> net//netfilter/nft_ct.c:782:26: error: 'struct net' has no member named 'nfct_timeout_list' INIT_LIST_HEAD(&ctx->net->nfct_timeout_list); ^~ In file included from net//netfilter/nft_ct.c:12:0: net//netfilter/nft_ct.c:783:40: error: 'struct net' has no member named 'nfct_timeout_list' list_for_each_entry(timeout, &ctx->net->nfct_timeout_list, head) { ^ include/linux/kernel.h:930:26: note: in definition of macro 'container_of' void *__mptr = (void *)(ptr); \ ^~~ include/linux/list.h:377:2: note: in expansion of macro 'list_entry' list_entry((ptr)->next, type, member) ^~~~~~~~~~ include/linux/list.h:464:13: note: in expansion of macro 'list_first_entry' for (pos = list_first_entry(head, typeof(*pos), member); \ ^~~~~~~~~~~~~~~~ >> net//netfilter/nft_ct.c:783:2: note: in expansion of macro 'list_for_each_entry' list_for_each_entry(timeout, &ctx->net->nfct_timeout_list, head) { ^~~~~~~~~~~~~~~~~~~ In file included from include/linux/kernel.h:10:0, from net//netfilter/nft_ct.c:12: net//netfilter/nft_ct.c:783:40: error: 'struct net' has no member named 'nfct_timeout_list' list_for_each_entry(timeout, &ctx->net->nfct_timeout_list, head) { ^ include/linux/compiler.h:316:19: note: in definition of macro '__compiletime_assert' bool __cond = !(condition); \ ^~~~~~~~~ include/linux/compiler.h:339:2: note: in expansion of macro '_compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__) ^~~~~~~~~~~~~~~~~~~ include/linux/build_bug.h:45:37: note: in expansion of macro 'compiletime_assert' #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) ^~~~~~~~~~~~~~~~~~ include/linux/kernel.h:931:2: note: in expansion of macro 'BUILD_BUG_ON_MSG' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^~~~~~~~~~~~~~~~ include/linux/kernel.h:931:20: note: in expansion of macro '__same_type' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^~~~~~~~~~~ include/linux/list.h:366:2: note: in expansion of macro 'container_of' container_of(ptr, type, member) ^~~~~~~~~~~~ include/linux/list.h:377:2: note: in expansion of macro 'list_entry' list_entry((ptr)->next, type, member) ^~~~~~~~~~ include/linux/list.h:464:13: note: in expansion of macro 'list_first_entry' for (pos = list_first_entry(head, typeof(*pos), member); \ ^~~~~~~~~~~~~~~~ >> net//netfilter/nft_ct.c:783:2: note: in expansion of macro 'list_for_each_entry' list_for_each_entry(timeout, &ctx->net->nfct_timeout_list, head) { ^~~~~~~~~~~~~~~~~~~ net//netfilter/nft_ct.c:783:40: error: 'struct net' has no member named 'nfct_timeout_list' list_for_each_entry(timeout, &ctx->net->nfct_timeout_list, head) { ^ include/linux/compiler.h:316:19: note: in definition of macro '__compiletime_assert' bool __cond = !(condition); \ ^~~~~~~~~ include/linux/compiler.h:339:2: note: in expansion of macro '_compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__) ^~~~~~~~~~~~~~~~~~~ include/linux/build_bug.h:45:37: note: in expansion of macro 'compiletime_assert' #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) ^~~~~~~~~~~~~~~~~~ include/linux/kernel.h:931:2: note: in expansion of macro 'BUILD_BUG_ON_MSG' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^~~~~~~~~~~~~~~~ include/linux/kernel.h:932:6: note: in expansion of macro '__same_type' !__same_type(*(ptr), void), \ ^~~~~~~~~~~ include/linux/list.h:366:2: note: in expansion of macro 'container_of' container_of(ptr, type, member) ^~~~~~~~~~~~ include/linux/list.h:377:2: note: in expansion of macro 'list_entry' list_entry((ptr)->next, type, member) ^~~~~~~~~~ include/linux/list.h:464:13: note: in expansion of macro 'list_first_entry' for (pos = list_first_entry(head, typeof(*pos), member); \ ^~~~~~~~~~~~~~~~ >> net//netfilter/nft_ct.c:783:2: note: in expansion of macro 'list_for_each_entry' list_for_each_entry(timeout, &ctx->net->nfct_timeout_list, head) { ^~~~~~~~~~~~~~~~~~~ In file included from include/linux/module.h:9:0, from net//netfilter/nft_ct.c:14: net//netfilter/nft_ct.c:783:40: error: 'struct net' has no member named 'nfct_timeout_list' list_for_each_entry(timeout, &ctx->net->nfct_timeout_list, head) { ^ include/linux/list.h:465:24: note: in definition of macro 'list_for_each_entry' &pos->member != (head); \ ^~~~ net//netfilter/nft_ct.c:805:15: error: 'const struct nf_conntrack_l4proto' has no member named 'ctnl_timeout'; did you mean 'get_timeouts'? l4proto->ctnl_timeout.obj_size, GFP_KERNEL); ^~~~~~~~~~~~ get_timeouts net//netfilter/nft_ct.c:817:45: error: 'struct net' has no member named 'nfct_timeout_list' list_add_tail_rcu(&timeout->head, &ctx->net->nfct_timeout_list); ^~ In file included from include/linux/kernel.h:10:0, from net//netfilter/nft_ct.c:12: net//netfilter/nft_ct.c: In function 'nft_ct_timeout_obj_dump': net//netfilter/nft_ct.c:848:31: error: 'const struct nf_conntrack_l4proto' has no member named 'ctnl_timeout'; did you mean 'get_timeouts'? if (likely(timeout->l4proto->ctnl_timeout.obj_to_nlattr)) { ^ include/linux/compiler.h:76:40: note: in definition of macro 'likely' # define likely(x) __builtin_expect(!!(x), 1) ^ net//netfilter/nft_ct.c:856:27: error: 'const struct nf_conntrack_l4proto' has no member named 'ctnl_timeout'; did you mean 'get_timeouts'? ret = timeout->l4proto->ctnl_timeout.obj_to_nlattr(skb, &timeout->data); ^~~~~~~~~~~~ get_timeouts vim +743 net//netfilter/nft_ct.c 735 736 static int 737 ctnl_timeout_parse_policy(void *timeouts, 738 const struct nf_conntrack_l4proto *l4proto, 739 struct net *net, const struct nlattr *attr) 740 { 741 int ret = 0; 742 > 743 if (likely(l4proto->ctnl_timeout.nlattr_to_obj)) { 744 struct nlattr *tb[l4proto->ctnl_timeout.nlattr_max + 1]; 745 746 ret = nla_parse_nested(tb, l4proto->ctnl_timeout.nlattr_max, 747 attr, l4proto->ctnl_timeout.nla_policy, 748 NULL); 749 if (ret < 0) 750 return ret; 751 > 752 ret = l4proto->ctnl_timeout.nlattr_to_obj(tb, net, timeouts); 753 } 754 return ret; 755 } 756 757 static void nft_ct_timeout_obj_eval(struct nft_object *obj, 758 struct nft_regs *regs, 759 const struct nft_pktinfo *pkt) 760 { 761 } 762 763 static int nft_ct_timeout_obj_init(const struct nft_ctx *ctx, 764 const struct nlattr * const tb[], 765 struct nft_object *obj) 766 { 767 __u16 l3num; 768 __u8 l4num; 769 struct nft_ct_timeout_obj *priv = nft_obj_data(obj); 770 const struct nf_conntrack_l4proto *l4proto; 771 struct ctnl_timeout *timeout, *matching = NULL; 772 int ret; 773 774 if (!tb[NFTA_CT_TIMEOUT_L4PROTO] || 775 !tb[NFTA_CT_TIMEOUT_L3PROTO] || 776 !tb[NFTA_CT_TIMEOUT_DATA]) 777 return -EINVAL; 778 779 l3num = ntohs(nla_get_be16(tb[NFTA_CT_TIMEOUT_L3PROTO])); 780 l4num = nla_get_u8(tb[NFTA_CT_TIMEOUT_L4PROTO]); 781 > 782 INIT_LIST_HEAD(&ctx->net->nfct_timeout_list); > 783 list_for_each_entry(timeout, &ctx->net->nfct_timeout_list, head) { 784 matching = timeout; 785 break; 786 } 787 788 if (matching) { 789 if (matching->l3num != l3num || 790 matching->l4proto->l4proto != l4num) 791 return -EINVAL; 792 return ctnl_timeout_parse_policy(&matching->data, 793 matching->l4proto, ctx->net, 794 tb[NFTA_CT_TIMEOUT_DATA]); 795 } 796 797 l4proto = nf_ct_l4proto_find_get(l3num, l4num); 798 799 if (l4proto->l4proto != l4num) { 800 ret = -EOPNOTSUPP; 801 goto err_proto_put; 802 } 803 804 timeout = kzalloc(sizeof(struct ctnl_timeout) + 805 l4proto->ctnl_timeout.obj_size, GFP_KERNEL); 806 if (timeout == NULL) { 807 ret = -ENOMEM; 808 goto err_proto_put; 809 } 810 811 ret = ctnl_timeout_parse_policy(&timeout->data, l4proto, ctx->net, 812 tb[NFTA_CT_TIMEOUT_DATA]); 813 if (ret < 0) 814 goto err; 815 timeout->l3num = l3num; 816 timeout->l4proto = l4proto; 817 list_add_tail_rcu(&timeout->head, &ctx->net->nfct_timeout_list); 818 priv->timeout = timeout; 819 820 return 0; 821 err: 822 kfree(timeout); 823 err_proto_put: 824 nf_ct_l4proto_put(l4proto); 825 return ret; 826 } 827 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: application/gzip