On Tue, Jun 16, 2026 at 05:54:28PM +0000, Dr. David Alan Gilbert wrote: > OK, for this pair I think would be fair for a Tested-by me as well; > they certainly resolve the hang and the WARN/BUGs. > I still see the errors as EIO on my tests, and on the older mirror type
Could you share your reproducer? I'm just using the original recipe you sent here: https://lore.kernel.org/linux-block/ai7rnH20IYeSmY8s@gallifrey/ And I'm seeing EINVAL instead EIO. > get the stuck resync on write, and on the newer mirror I see the write > apparently succeed (did it really?) There was a time when ext4 used to fallback to buffered io for writes but not for reads, but looks like that was fixed since 6.18, so should be returning error. I tried testing it with a modification to your original read test, and it is still failing with EINVAL for me: pread of 4096 said: -1 (Invalid argument) pwrite of 4096 said: -1 (Invalid argument) --- #define _GNU_SOURCE #include <errno.h> #include <fcntl.h> #include <stdio.h> #include <unistd.h> const char* path="/mnt/tmp/testfile"; static char buf[8192]; int main() { int fd=open(path, O_RDWR|O_DIRECT|O_CLOEXEC); errno=0; int res3=pread(fd, buf, 4096, 0); printf("pread of 4096 said: %d (%m)\n", res3); res3=pwrite(fd, buf, 4096, 0); printf("pwrite of 4096 said: %d (%m)\n", res3); } --
