Re: [PATCH] selftests: openat2: Fix testing failure for O_LARGEFILE flag

Aleksa Sarai
2021-08-24T11:21:51Z

[-- Attachment #1: Type: text/plain, Size: 2885 bytes --]

On 2021-08-23, Shuah Khan <skhan@linuxfoundation.org> wrote:
> Hi Baolin,
>
> On 8/22/21 8:40 PM, Baolin Wang wrote:
> > Hi Shuah,
> >
> > On 2021/7/28 20:32, Baolin Wang wrote:
> > > Hi,
> > >
> > > > When running the openat2 test suite on ARM64 platform, we got below failure,
> > > > since the definition of the O_LARGEFILE is different on ARM64. So we can
> > > > set the correct O_LARGEFILE definition on ARM64 to fix this issue.
> > >
> > > Sorry, I forgot to copy the failure log:
> > >
>
> Please cc everybody get_maintainers.pl suggests. You are missing
> key reviewers for this change.
>
> Adding Christian Brauner and Aleksa Sarai to the thread.
>
> > > # openat2 unexpectedly returned # 3['/lkp/benchmarks/kernel_selftests/tools/testing/selftests/openat2'] with 208000 (!= 208000)
>
> Not sure I understand this. 208000 (!= 208000) look sthe same to me.
>
> > > not ok 102 openat2 with incompatible flags (O_PATH | O_LARGEFILE) fails with -22 (Invalid argument)
> > >
> > > >
> > > > Signed-off-by: Baolin Wang <baolin.wang@linux.alibaba.com>
> >
> > Could you apply this patch if no objection from your side? Thanks.
> >
>
> Ideally this define should come from an include file.

The issue is that O_LARGEFILE is set to 0 by glibc because glibc appears
to hide the nuts and bolts of largefile support from userspace. I
couldn't find a nice way of doing a architecture-dependent includes of
include/uapi from kselftests, so I just went with this instead -- but I
agree that a proper include would be better if someone can figure out
how to do it.

> Christian, Aleksa,
>
> Can you review this patch and let me know if this approach looks right.

Reviewed-by: Aleksa Sarai <cyphar@cyphar.com>

It'd be nice to fix this for the other architectures I mention in the
comment (mips, parisc, powerpc, sparc) -- which are the ones that I
could find that had a custom O_LARGEFILE definition.

> > > > ---
> > > >   tools/testing/selftests/openat2/openat2_test.c | 4 ++++
> > > >   1 file changed, 4 insertions(+)
> > > >
> > > > diff --git a/tools/testing/selftests/openat2/openat2_test.c b/tools/testing/selftests/openat2/openat2_test.c
> > > > index d7ec1e7..1bddbe9 100644
> > > > --- a/tools/testing/selftests/openat2/openat2_test.c
> > > > +++ b/tools/testing/selftests/openat2/openat2_test.c
> > > > @@ -22,7 +22,11 @@
> > > >    * XXX: This is wrong on {mips, parisc, powerpc, sparc}.
> > > >    */
> > > >   #undef    O_LARGEFILE
> > > > +#ifdef __aarch64__
> > > > +#define    O_LARGEFILE 0x20000
> > > > +#else
> > > >   #define    O_LARGEFILE 0x8000
> > > > +#endif
> > > >   struct open_how_ext {
> > > >       struct open_how inner;
> > > >
> >
>
> thanks,
> -- Shuah

--
Aleksa Sarai
Senior Software Engineer (Containers)
SUSE Linux GmbH
<https://www.cyphar.com/>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]