Subject: ENOBUILD in nf_tables

From: Jakub Kicinski <[email-masked]>
Date: Fri, 19 Jul 2019 10:07:43 -0700

Hi Pablo!

I hit the following build breakage on net with the config attached.

GCC 9, doesn't seem like your just-posted series fixes this?

From a quick scan it doesn't seem like your just posted series fixes
that, but I didn't actually test (the threading is broken and patchwork

  CC      include/net/netfilter/nf_tables_offload.h.s
In file included from ../include/net/netfilter/nf_tables.h:8,
                 from ./../include/net/netfilter/nf_tables_offload.h:5,
                 from <command-line>:
../include/linux/netfilter/x_tables.h: In function ‘xt_net’:
../include/linux/netfilter/x_tables.h:46:19: error: dereferencing pointer to incomplete type ‘const struct nf_hook_state’
   46 |  return par->state->net;
      |                   ^~
In file included from ../include/net/netfilter/nf_tables.h:8,
                 from ./../include/net/netfilter/nf_tables_offload.h:5,
                 from <command-line>:
../include/linux/netfilter/x_tables.h: At top level:
../include/linux/netfilter/x_tables.h:449:64: error: unknown type name ‘nf_hookfn’
  449 | struct nf_hook_ops *xt_hook_ops_alloc(const struct xt_table *, nf_hookfn *);
      |                                                                ^~~~~~~~~
In file included from ../include/net/netfilter/nf_tables.h:12,
                 from ./../include/net/netfilter/nf_tables_offload.h:5,
                 from <command-line>:
../include/net/netfilter/nf_flow_table.h:19:2: error: unknown type name ‘nf_hookfn’
   19 |  nf_hookfn   *hook;
      |  ^~~~~~~~~
In file included from ./../include/net/netfilter/nf_tables_offload.h:5,
                 from <command-line>:
../include/net/netfilter/nf_tables.h:929:2: error: unknown type name ‘nf_hookfn’
  929 |  nf_hookfn   *hooks[NF_MAX_HOOKS];
      |  ^~~~~~~~~
../include/net/netfilter/nf_tables.h:957:22: error: field ‘ops’ has incomplete type
  957 |  struct nf_hook_ops  ops;
      |                      ^~~
../include/net/netfilter/nf_tables.h: In function ‘nft_gencursor_next’:
../include/net/netfilter/nf_tables.h:1223:12: error: ‘const struct net’ has no member named ‘nft’
 1223 |  return net->nft.gencursor + 1 == 1 ? 1 : 0;
      |            ^~
In file included from ../include/linux/kernel.h:11,
                 from ../include/net/flow_offload.h:4,
                 from ./../include/net/netfilter/nf_tables_offload.h:4,
                 from <command-line>:
../include/net/netfilter/nf_tables.h: In function ‘nft_genmask_cur’:
../include/net/netfilter/nf_tables.h:1234:27: error: ‘const struct net’ has no member named ‘nft’
 1234 |  return 1 << READ_ONCE(net->nft.gencursor);
      |                           ^~
../include/linux/compiler.h:256:17: note: in definition of macro ‘__READ_ONCE’
  256 |  union { typeof(x) __val; char __c[1]; } __u;   \
      |                 ^
../include/net/netfilter/nf_tables.h:1234:14: note: in expansion of macro ‘READ_ONCE’
 1234 |  return 1 << READ_ONCE(net->nft.gencursor);
      |              ^~~~~~~~~
../include/net/netfilter/nf_tables.h:1234:27: error: ‘const struct net’ has no member named ‘nft’
 1234 |  return 1 << READ_ONCE(net->nft.gencursor);
      |                           ^~
../include/linux/compiler.h:258:22: note: in definition of macro ‘__READ_ONCE’
  258 |   __read_once_size(&(x), __u.__c, sizeof(x));  \
      |                      ^
../include/net/netfilter/nf_tables.h:1234:14: note: in expansion of macro ‘READ_ONCE’
 1234 |  return 1 << READ_ONCE(net->nft.gencursor);
      |              ^~~~~~~~~
../include/net/netfilter/nf_tables.h:1234:27: error: ‘const struct net’ has no member named ‘nft’
 1234 |  return 1 << READ_ONCE(net->nft.gencursor);
      |                           ^~
../include/linux/compiler.h:258:42: note: in definition of macro ‘__READ_ONCE’
  258 |   __read_once_size(&(x), __u.__c, sizeof(x));  \
      |                                          ^
../include/net/netfilter/nf_tables.h:1234:14: note: in expansion of macro ‘READ_ONCE’
 1234 |  return 1 << READ_ONCE(net->nft.gencursor);
      |              ^~~~~~~~~
../include/net/netfilter/nf_tables.h:1234:27: error: ‘const struct net’ has no member named ‘nft’
 1234 |  return 1 << READ_ONCE(net->nft.gencursor);
      |                           ^~
../include/linux/compiler.h:260:30: note: in definition of macro ‘__READ_ONCE’
  260 |   __read_once_size_nocheck(&(x), __u.__c, sizeof(x)); \
      |                              ^
../include/net/netfilter/nf_tables.h:1234:14: note: in expansion of macro ‘READ_ONCE’
 1234 |  return 1 << READ_ONCE(net->nft.gencursor);
      |              ^~~~~~~~~
../include/net/netfilter/nf_tables.h:1234:27: error: ‘const struct net’ has no member named ‘nft’
 1234 |  return 1 << READ_ONCE(net->nft.gencursor);
      |                           ^~
../include/linux/compiler.h:260:50: note: in definition of macro ‘__READ_ONCE’
  260 |   __read_once_size_nocheck(&(x), __u.__c, sizeof(x)); \
      |                                                  ^
../include/net/netfilter/nf_tables.h:1234:14: note: in expansion of macro ‘READ_ONCE’
 1234 |  return 1 << READ_ONCE(net->nft.gencursor);
      |              ^~~~~~~~~
../scripts/Makefile.build:304: recipe for target 'include/net/netfilter/nf_tables_offload.h.s' failed
make[2]: *** [include/net/netfilter/nf_tables_offload.h.s] Error 1
make[2]: *** Waiting for unfinished jobs....
/home/jkicinski/devel/linux/Makefile:1077: recipe for target 'include' failed
make[1]: *** [include] Error 2
make[1]: Leaving directory '/home/jkicinski/devel/linux/build_randconfig'
Makefile:179: recipe for target 'sub-make' failed
make: *** [sub-make] Error 2