[PATCH libaio v2 00/10] Add time64 support

Guillem Jover <[email protected]>
Newsgroups gmane.linux.kernel.aio.general
Message-ID <[email protected]>
From: Guillem Jover <[email protected]>

Hi!

In Debian, there was a decision to perform the time64 transition
for all 32-bit architectures using a fake SONAME bump (where the actual
SONAME does not get bumped but the packaging is changed as if it had,
with additional relationship constraints), except for i386.

As I'd rather not leave i386 behind, I implemented dual-ABI support for
the libraries I maintain there, including libaio, in a similar way as
what glibc or musl do. But because this was time sensitive and had not
been coordinated with upstream, I also did a real (local) SONAME bump to
avoid binary incompatibilities and stomping over the upstream SONAME, in
case this was rejected upstream, or modifications were requested or
similar (the SONAME in Debian is currently libaio.so.1t64, which I'd
like to revert once the API/ABI is settled upstream).

The other issue I faced was that the kernel seems to be broken for
the io_pgetevents_time64() syscall on 64-bit kernels running 32-bit
userland (at least for x86), and had no time to verify whether what I
thought could be the fix would actually work. I did that this weekend,
and it seems to work, but as noted in that patch, I'm not entirely sure
why it was not wired like that initially, and I suspect all other 32-bit
ports with a 64-bit counterpart that can run 32-bit userland would need
the same treatment, but I cannot easily test them. I'm attaching the
patch against Linux 6.8.12 at the end of this series too, but the code
in libaio would not be able to rely on that anyway. Which is also why I
added that syscall support in a libaio patch and in another one disabled
it, so that I could test this more easily, and in the future so that it
can (if needed) be reverted more easily.

 [PATCH linux v2] arch: Wire up io_pgetevents_time64 compat entry point on i386

The code also unconditionally exports the time64 API on all 32-bit
ports, even for new ones where by default their ABI is already time64,
because I don't know of a clean way to get that at build time, except
for tracking an explicit list, which seemed too cumbersome.

In any case, let me know what you think, and if all is good and you
agree with the API/ABI changes, then I'd proceed to revert the local
SONAME bump in Debian, as that's currently causing some issues with
binary-only projects such as Oracle and similar.

I can also provide this as a merge request on pagure if that is better.

Thanks,
Guillem

Changes since v1:
- Add gitignore update and sigset rename patches.
- Rebased against the version used in Debian.
- Several typo fixes, and wording improvements.
- Retesed w/ and w/ the kernel fix on 64-bit kernel 32-bit userland,
  all seems good.

Guillem Jover (10):
  Update .gitignore for the harness artifacts
  Move semicolon to SYMVER and DEFSYMVER call sites
  Use new symver function attribute to support LTO builds
  Remove unused vsys_def.h
  Remove unused raw_syscall.c
  Wrap long declarations exceeding 80 columns
  Rename sigset struct from data to aio_sigset
  Add time64 syscall support
  Disable io_pgetevents_time64 as it is broken on 64-bit kernel 32-bit
    userland
  Add time64 public functions on 32-bit architectures

 .gitignore                                    |  5 +
 harness/Makefile                              |  2 +-
 src/Makefile                                  |  9 +-
 src/{io_getevents.c => aio_getevents.c}       | 25 +++--
 src/aio_pgetevents.c                          | 93 +++++++++++++++++++
 src/aio_ring.h                                |  3 +-
 src/aio_time.h                                | 54 +++++++++++
 src/compat-0_1.c                              | 29 +++---
 src/io_cancel.c                               |  5 +-
 src/io_getevents.c                            | 25 +++--
 src/{io_queue_run.c => io_getevents_time64.c} | 26 +++---
 src/io_pgetevents.c                           | 40 +++-----
 ...{io_queue_run.c => io_pgetevents_time64.c} | 30 +++---
 src/io_queue_run.c                            |  5 +-
 src/io_queue_wait.c                           | 17 +++-
 src/io_submit.c                               |  3 +-
 src/libaio.h                                  | 53 ++++++++---
 src/libaio.map                                |  6 ++
 src/raw_syscall.c                             | 19 ----
 src/syscall.h                                 | 17 +++-
 src/vsys_def.h                                | 24 -----
 21 files changed, 340 insertions(+), 150 deletions(-)
 copy src/{io_getevents.c => aio_getevents.c} (60%)
 create mode 100644 src/aio_pgetevents.c
 create mode 100644 src/aio_time.h
 copy src/{io_queue_run.c => io_getevents_time64.c} (67%)
 copy src/{io_queue_run.c => io_pgetevents_time64.c} (64%)
 delete mode 100644 src/raw_syscall.c
 delete mode 100644 src/vsys_def.h

-- 
2.45.1


--
To unsubscribe, send a message with 'unsubscribe linux-aio' in
the body to [email protected].  For more info on Linux AIO,
see: http://www.kvack.org/aio/
Don't email: <a href=mailto:"[email protected]">[email protected]</a>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.