[PATCH v2 0/9] Fix getdents{64} regression on some FS

Adhemerval Zanella adhemerval.zanella@linaro.org
Fri Oct 2 17:06:11 GMT 2020


This is updated version [1], rebased against master add with some
suggestion from previous review.  I am re-sending because BZ #23960
report keep being updated with users that see the BZ #23960 issue in
different scenarios.

I have reports from both Debian and Gentoo developers that this
patchset fixes the issues they saw with recent glibc on some
scenarios (schroot plus qemu) and on some filesystem (ext4).  They
can correct me with their testing status.

[1] https://sourceware.org/pipermail/libc-alpha/2020-April/112866.html

Adhemerval Zanella (9):
  linux: Move posix dir implementations to Linux
  linux: Simplify opendir buffer allocation
  linux: Add __readdir_unlocked
  linux: Use getdents64 on non-LFS readdir
  linux: Set internal DIR filepos as off64_t [BZ #23960, BZ #24050]
  linux: Add __readdir64_unlocked
  linux: Add __old_readdir64_unlocked
  linux: Use getdents64 on readdir64 compat implementation
  dirent: Deprecate getdirentries

 NEWS                                          |   3 +
 dirent/Makefile                               |   2 +-
 dirent/dirent.h                               |  11 +-
 dirent/tst-seekdir2.c                         | 156 +++++++++++++++++
 include/dirent.h                              |   5 +-
 support/temp_file.c                           |  12 +-
 support/temp_file.h                           |   7 +
 sysdeps/posix/readdir.c                       | 127 --------------
 sysdeps/posix/readdir_r.c                     | 159 ------------------
 sysdeps/posix/telldir.c                       |  33 ----
 sysdeps/unix/sysv/linux/Makefile              |   3 +
 sysdeps/{posix => unix/sysv/linux}/closedir.c |   4 +
 sysdeps/{posix => unix/sysv/linux}/dirfd.c    |   0
 .../{posix => unix/sysv/linux}/dirstream.h    |   7 +-
 .../{posix => unix/sysv/linux}/fdopendir.c    |   0
 sysdeps/unix/sysv/linux/getdents64.c          |  95 +----------
 sysdeps/unix/sysv/linux/olddirent.h           |   4 +-
 sysdeps/{posix => unix/sysv/linux}/opendir.c  |  56 +++---
 sysdeps/unix/sysv/linux/readdir.c             |  69 +++++++-
 sysdeps/unix/sysv/linux/readdir.h             | 159 ++++++++++++++++++
 sysdeps/unix/sysv/linux/readdir64.c           | 149 ++++++++++++++--
 sysdeps/unix/sysv/linux/readdir64_r.c         | 103 ++++++++++--
 sysdeps/unix/sysv/linux/readdir_r.c           |  50 +++++-
 .../{posix => unix/sysv/linux}/rewinddir.c    |   5 +
 sysdeps/{posix => unix/sysv/linux}/seekdir.c  |  36 +++-
 sysdeps/unix/sysv/linux/telldir.c             |  76 +++++++++
 sysdeps/unix/sysv/linux/telldir.h             |  64 +++++++
 27 files changed, 907 insertions(+), 488 deletions(-)
 create mode 100644 dirent/tst-seekdir2.c
 delete mode 100644 sysdeps/posix/readdir.c
 delete mode 100644 sysdeps/posix/readdir_r.c
 delete mode 100644 sysdeps/posix/telldir.c
 rename sysdeps/{posix => unix/sysv/linux}/closedir.c (95%)
 rename sysdeps/{posix => unix/sysv/linux}/dirfd.c (100%)
 rename sysdeps/{posix => unix/sysv/linux}/dirstream.h (93%)
 rename sysdeps/{posix => unix/sysv/linux}/fdopendir.c (100%)
 rename sysdeps/{posix => unix/sysv/linux}/opendir.c (74%)
 create mode 100644 sysdeps/unix/sysv/linux/readdir.h
 rename sysdeps/{posix => unix/sysv/linux}/rewinddir.c (95%)
 rename sysdeps/{posix => unix/sysv/linux}/seekdir.c (65%)
 create mode 100644 sysdeps/unix/sysv/linux/telldir.c
 create mode 100644 sysdeps/unix/sysv/linux/telldir.h

-- 
2.25.1



More information about the Libc-alpha mailing list