RFR: 8316304: (fs) Add support for BasicFileAttributes.creationTime() for Linux [v8]
Thomas Stuefe
stuefe at openjdk.org
Wed Oct 4 12:40:43 UTC 2023
On Tue, 3 Oct 2023 17:41:24 GMT, Severin Gehwolf <sgehwolf at openjdk.org> wrote:
>> Please review this nio change which adds `BasicFileAttributes.creationTime()` support for Linux by means of the `statx` Linux specific system call. The patch does a dynamic lookup of the function and if it is available, uses it to set the support birth time capability in `UnixNativeDispatcher`. When `statx` is not available, it won't use it and fall back to the old behaviour on such systems. It should, however, compile fine on Linux systems not supporting the `statx` system call.
>>
>> Testing:
>> - [x] GHA (MacOS X failure seems unrelated)
>> - [x] `java.nio` tests.
>> - [x] Manual builds and tests on older glibc versions (2.17 => fallback, 2.28+ => works). Compiles fine and falls back to the not supported case as it was before this patch.
>>
>> Thoughts?
>
> Severin Gehwolf has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains 12 additional commits since the last revision:
>
> - Link libCreationTimeHelper with -ldl
> - Merge branch 'master' into JDK-8316304-statx-create-time-new
> - Cleanup UnixNativeDispatcher.c
> - Refactor test so as to not use reflection
> - Fix indents
> - Check correct fieldID
> - Add copyright
> - Add support for nano seconds for btime on Linux
> - Fix style
> - Wrap copy_statx_attributes with ifdef __linux__
> - ... and 2 more: https://git.openjdk.org/jdk/compare/ca543a9a...83347ec1
src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c line 80:
> 78: // support. We still want to ensure we can call statx at runtime
> 79: // if the runtime glibc version supports it (>= 2.28)
> 80: #ifndef __NR_statx
As long as we have to accommodate the case where struct statx is not defined, we may just as well do it always: just define a structure binary compatible to statx but named differently (e.g. my_statx) to prevent name clashes in case the structure happens to be defined already from libc; then use that structure as return type for your function pointer.
The advantage would be you don't need to know and depend on __NR_statx, and you don't need to include asm/unistd. And no two cases to build and test.
We do this already in other places, see e.g. the dynamic inclusion of mallinfo2() in os_linux.cpp.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/15792#discussion_r1345719922
More information about the nio-dev
mailing list