Re: [LTP] [PATCH] configure.ac: Add _GNU_SOURCE for struct fs_quota_statv check

Li Wang
2024-06-19T12:06:23Z

Hi Petr, XFS-Experts,

On Wed, Jun 19, 2024 at 5:27 PM Petr Vorel <pvorel@suse.cz> wrote:

> Hi Li,
>
> > These changes help ensure that the necessary features and definitions
> > are available during the configuration process, preventing potential
> > issues related to missing or incompatible definitions. This should
> > resolve the compilation error related to struct fs_quota_statv:
>
> > /usr/include/xfs/xqm.h:167:8: error: redefinition of ‘struct
> fs_qfilestatv’
>
> I wonder how _GNU_SOURCE influences any XFS header?
> I haven't found anything in (<xfs/*.h>) or in <sys/quota.h>
>

With installing a newer xfsprogs-dev package on RHEL, we got a problem
in configuring our LTP test.

According to the inclusion relationship: "xfs/xqm.h" -> "xfs/xfs.h" ->
"xfs/linux.h".
The linux.h header introduces an inlined function that needs '_GNU_SOURCE'
and <fcnctl.h>.

$ git clone https://kernel.googlesource.com/pub/scm/fs/xfs/xfsprogs-dev
$ cd xfsprogs-dev/
$ git describe --contains 9d6023a856a1c4f84415dff59b0d5459cc8768db
v5.5.0-rc1~39

#if defined(FALLOC_FL_ZERO_RANGE)
static inline int
platform_zero_range(
int fd,
xfs_off_t start,
size_t len)
{
int ret;

ret = fallocate(fd, FALLOC_FL_ZERO_RANGE, start, len);
if (!ret)
return 0;
return -errno;
}
#else
#define platform_zero_range(fd, s, l) (-EOPNOTSUPP)
#endif

My test version is based on 6.5 so contains the inlined function to build.

# rpm -qf /usr/include/xfs/xqm.h
xfsprogs-devel-6.5.0-3.el10.x86_64

> I know that some quotactl0[23].c define _GNU_SOURCE, but it's interesting
> that
> this influence the header. Also, which RHEL (or whatever distro) version
> has
> this problem?

The error occurred (with install xfsprogs-devel) during the configure script
checking struct fs_quota_statv. It failed to compile conftest.c and report
such errors:

configure:5697: checking for struct fs_quota_statv
configure:5697: gcc -c -g -O2 conftest.c >&5
In file included from /usr/include/xfs/xfs.h:9,
from /usr/include/xfs/xqm.h:9,
from conftest.c:138:
/usr/include/xfs/linux.h: In function 'platform_zero_range':
/usr/include/xfs/linux.h:188:15: error: implicit declaration of function
'fallocate' [-Wimplicit-function-declaration]
188 | ret = fallocate(fd, FALLOC_FL_ZERO_RANGE, start, len);
| ^~~~~~~~~
configure:5697: $? = 1

It similarly to the above quotactl07 patch fix, so adding '#define
_GNU_SOURCE'
is actually for making the fallocate() happy.

Or, another way is the change made in "xfsprogs-dev/include/linux.h"
otherwise we can't
configure our LTP correctly.

--
Regards,
Li Wang