Pádraig Brady <[email protected]> writes: > On 18/03/2023 23:39, Sam James wrote: >> Pádraig Brady <[email protected]> writes: >> >>> On 18/03/2023 22:55, Sam James wrote: >>>> Pádraig Brady <[email protected]> writes: >>>> >>>>> On 16/03/2023 20:44, Sam James wrote: >>>>>> # grep -rsin "FAIL:" >>>>>> /var/tmp/portage/sys-apps/coreutils-9.1_p20230313/temp/build.log >>>>>> 8833:# XFAIL: 0 >>>>>> 8834:# FAIL: 3 >>>>>> 12578:FAIL: tests/misc/cksum-raw >>>>>> 17775:FAIL: tests/df/df-symlink >>>>>> 18973:FAIL: tests/dd/nocache_eof > >>>>>> For nocache_eof: >>>>>> ``` >>>>>> + strace_dd if=in.f of=out.f bs=1M iflag=nocache oflag=nocache,sync >>>>>> + strace -o dd.strace -e fadvise64,fadvise64_64 dd status=none if=in.f >>>>>> of=out.f bs=1M iflag=nocache oflag=nocache,sync >>>>>> + advised_to_eof >>>>>> + grep -F ' 0, POSIX_FADV_DONTNEED' dd.strace >>>>>> + fail=1 >>>>> >>>>> I suspect the fadvise64,fadvise64_64 strace filter isn't working on s390. >>>>> An unfiltered strace output from one of those dd commands would be useful. > >> See http://sprunge.us/G0TUET. I chucked it in >> for the other invocations too. > > Interesting. So from strace's point of view > we're requesting POSIX_FADV_NORMAL rather than POSIX_FADV_DONTNEED. > POSIX_FADV_NORMAL is 0 which suggests to be some ABI issue > rather than an API or user logic issue. > > For example perhaps there is some parameter conversion issue in the s390 > kernel. > For e.g. the following bug fix may not have been applied to s390? > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e412ac4971d27ea84f3d63ce425c6ab2d6a67f23 > > I also see in the glibc code that: > "s390 implements fadvice64_64 using a specific struct with arguments > packed inside. This is the only implementation handled in arch-specific > code." > > The issue might even be in strace. > > In any case nothing has changed on the coreutils side of things in this > regard, > and there is no gnulib wrapping of this function either. > > I suspect a separate simple C program that just calls posix_fadvise(...) > would be enough to repo, or if GNU dd is available the simplest check is: > strace -e fadvise64,fadvise64_64 dd oflag=nocache if=/dev/null of=/dev/null > status=none
I started to write up a report to the relevant kernel ML given:
```
(s390) # strace -e fadvise64,fadvise64_64 dd oflag=nocache if=/dev/null
of=/dev/null status=none
fadvise64_64(2142494232, 19186648160, 0, POSIX_FADV_NORMAL) = 0 # <--
POSIX_FADV_NORMAL is unexpected here! Should be POSIX_FADV_DONTNEED.
+++ exited with 0 +++
(s390x) # strace -e fadvise64,fadvise64_64 dd oflag=nocache if=/dev/null
of=/dev/null status=none
fadvise64(1, 0, 0, POSIX_FADV_DONTNEED) = 0
+++ exited with 0 +++
```
but when I tried to reproduce it in a small C program, I couldn't
(POSIX_FADV_DONTNEED) appeared as expected.
Would you mind crafting one that has the right expected behaviour?
I tried:
```
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
int main() {
char buf[1024];
int fd = openat(AT_FDCWD, "/dev/null", O_CREAT|O_TRUNC, 0666);
read(fd, buf, 1024);
lseek(3, 512, SEEK_CUR);
posix_fadvise(fd, 512, 1024, POSIX_FADV_DONTNEED);
}
```
with
```
[...]
openat(AT_FDCWD, "/dev/null", O_RDONLY|O_CREAT|O_TRUNC, 0666) = 3
read(3, "", 1024) = 0
_llseek(3, 512, [0], SEEK_CUR) = 0
fadvise64(3, 512, 1024, POSIX_FADV_DONTNEED) = 0
exit_group(0) = ?
+++ exited with 0 +++
````
Mine didn't end up calling fadvise64_64, just fadvise64, so I imagine
that's the issue somehow. I'm guessing I'm missing something obvious
but I don't know what yet.
best,
sam
>
> cheers,
> Pádraig
signature.asc
Description: PGP signature
