Re: nfs compile error nfslocalio.o and localio.o since v6.14-rc1

Pali Rohár
2025-02-15T16:38:13Z

On Saturday 15 February 2025 11:29:45 Chuck Lever wrote:
> Hi Pali -
>
> On 2/15/25 7:00 AM, Pali Rohár wrote:
> > Hello, since v6.14-rc1, file nfslocalio.c cannot be compiled with
> > gcc-8.3 and attached .config file. Same problem is with localio.c.
>
> If the interwebs are correct, gcc-8.3 was released in 2014. ISTR that
> recent releases of the Linux kernel no longer support gcc versions that
> old.

Hello, I know that this is old version, and I specially used it just to
check if everything compiles correctly. And it failed.

Per https://docs.kernel.org/process/changes.html the minimal version of
gcc is 5.1, so I think that compilation with gcc 8.3 should still be
supported.

> It appears to be snagging on kernel-wide utility helpers, not code
> specific to NFS.

It looks like that, but only those two nfs files cause compile errors.
Everything else compiles without problem. So it is quite suspicious and
maybe it could signal that those helper are used incorrectly in nfs
code? I'm not sure, I have not investigated it.

> If that's the case, it might not be possible for us to address this
> breakage.
>
> Adding Mike, who contributed this code.
>
> > Error is:
> >
> > $ make bzImage
> > CALL scripts/checksyscalls.sh
> > DESCEND objtool
> > INSTALL libsubcmd_headers
> > CC fs/nfs_common/nfslocalio.o
> > In file included from ./include/linux/rbtree.h:24,
> > from ./include/linux/mm_types.h:11,
> > from ./include/linux/mmzone.h:22,
> > from ./include/linux/gfp.h:7,
> > from ./include/linux/umh.h:4,
> > from ./include/linux/kmod.h:9,
> > from ./include/linux/module.h:17,
> > from fs/nfs_common/nfslocalio.c:7:
> > fs/nfs_common/nfslocalio.c: In function ‘nfs_close_local_fh’:
> > ./include/linux/rcupdate.h:531:9: error: dereferencing pointer to incomplete type ‘struct nfsd_file’
> > typeof(*p) *local = (typeof(*p) *__force)READ_ONCE(p); \
> > ^
> > ./include/linux/rcupdate.h:650:31: note: in expansion of macro ‘__rcu_access_pointer’
> > #define rcu_access_pointer(p) __rcu_access_pointer((p), __UNIQUE_ID(rcu), __rcu)
> > ^~~~~~~~~~~~~~~~~~~~
> > fs/nfs_common/nfslocalio.c:288:10: note: in expansion of macro ‘rcu_access_pointer’
> > ro_nf = rcu_access_pointer(nfl->ro_file);
> > ^~~~~~~~~~~~~~~~~~
> > make[4]: *** [scripts/Makefile.build:207: fs/nfs_common/nfslocalio.o] Error 1
> > make[3]: *** [scripts/Makefile.build:465: fs/nfs_common] Error 2
> > make[2]: *** [scripts/Makefile.build:465: fs] Error 2
> > make[1]: *** [/home/pali/develop/kernel.org/linux/Makefile:1994: .] Error 2
> > make: *** [Makefile:251: __sub-make] Error 2
> >
> >
> > $ make fs/nfs/localio.o
> > CALL scripts/checksyscalls.sh
> > DESCEND objtool
> > INSTALL libsubcmd_headers
> > CC fs/nfs/localio.o
> > In file included from ./include/linux/rbtree.h:24,
> > from ./include/linux/mm_types.h:11,
> > from ./include/linux/mmzone.h:22,
> > from ./include/linux/gfp.h:7,
> > from ./include/linux/umh.h:4,
> > from ./include/linux/kmod.h:9,
> > from ./include/linux/module.h:17,
> > from fs/nfs/localio.c:11:
> > fs/nfs/localio.c: In function ‘nfs_local_open_fh’:
> > ./include/linux/rcupdate.h:538:9: error: dereferencing pointer to incomplete type ‘struct nfsd_file’
> > typeof(*p) *local = (typeof(*p) *__force)READ_ONCE(p); \
> > ^
> > ./include/linux/rcupdate.h:686:2: note: in expansion of macro ‘__rcu_dereference_check’
> > __rcu_dereference_check((p), __UNIQUE_ID(rcu), \
> > ^~~~~~~~~~~~~~~~~~~~~~~
> > ./include/linux/rcupdate.h:758:28: note: in expansion of macro ‘rcu_dereference_check’
> > #define rcu_dereference(p) rcu_dereference_check(p, 0)
> > ^~~~~~~~~~~~~~~~~~~~~
> > fs/nfs/localio.c:275:7: note: in expansion of macro ‘rcu_dereference’
> > nf = rcu_dereference(*pnf);
> > ^~~~~~~~~~~~~~~
> > make[4]: *** [scripts/Makefile.build:207: fs/nfs/localio.o] Error 1
> > make[3]: *** [scripts/Makefile.build:465: fs/nfs] Error 2
> > make[2]: *** [scripts/Makefile.build:465: fs] Error 2
> > make[1]: *** [/home/pali/develop/kernel.org/linux/Makefile:1994: .] Error 2
> > make: *** [Makefile:251: __sub-make] Error 2
> >
> >
> > Reproduced from commit 7ff71e6d9239 ("Merge tag 'alpha-fixes-v6.14-rc2'
> > of git://git.kernel.org/pub/scm/linux/kernel/git/mattst88/alpha").
>
>
> --
> Chuck Lever