On 2025-07-22 14:47, Collin Funk wrote:
int fd = open (".", O_DIRECTORY);
I think one also needs O_RDONLY for that to conform to POSIX.
More generally, fsync requires write access to the file, so it's not
just directories. Also, fdatasync has the same issue. I installed the
attached further patch to document these more general issues.
By the way, I see only two usages of fdatasync or fsync in Gnulib. One,
in lib/utimens.c is never used (it's for obsolete Linux kernels and even
way back when it was never used). The other, in lib/textstyle.in.h,
seems to be a performance bug - at least, the description of FLUSH_ALL
doesn't explain the sometimes-severe performance issues involved, which
leads me to be puzzled about what's intended.From 1f4148c1573f2019012f190b4760cd87dc0e0bd7 Mon Sep 17 00:00:00 2001
From: Paul Eggert <[email protected]>
Date: Tue, 22 Jul 2025 15:37:22 -0700
Subject: [PATCH] fsync, fdatasync: generalize fsync write access doc
---
ChangeLog | 7 +++++--
doc/posix-functions/fdatasync.texi | 5 +++++
doc/posix-functions/fsync.texi | 10 +++-------
3 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 3cebc0d793..15c7c1a941 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,11 @@
2025-07-22 Collin Funk <[email protected]>
+ Paul Eggert <[email protected]>
- doc: Document that fsync doesn't work on directories on AIX 7.3.
- Reported by Lakshmi-Surekha <[email protected]> in:
+ doc: Document that fsync and fdatasync require write access.
+ Reported for fsync on AIX by Lakshmi-Surekha
+ <[email protected]> in:
<https://github.com/tukaani-project/xz/issues/188>.
+ * doc/posix-functions/fdatasync.texi:
* doc/posix-functions/fsync.texi: Document the behavior.
2025-07-22 Paul Eggert <[email protected]>
diff --git a/doc/posix-functions/fdatasync.texi b/doc/posix-functions/fdatasync.texi
index 646c5b9985..d2e7c6e964 100644
--- a/doc/posix-functions/fdatasync.texi
+++ b/doc/posix-functions/fdatasync.texi
@@ -19,4 +19,9 @@ Mac OS X 10.5, FreeBSD 11.0, OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 14, Android 2
Portability problems not fixed by Gnulib:
@itemize
+@item
+If the argument is a file descriptor that lacks write access,
+such as a directory file descriptor, this function fails
+with @code{EBADF} on some platforms:
+AIX 7.3, Cygwin 3.6.x.
@end itemize
diff --git a/doc/posix-functions/fsync.texi b/doc/posix-functions/fsync.texi
index 924546516b..48ff17bccf 100644
--- a/doc/posix-functions/fsync.texi
+++ b/doc/posix-functions/fsync.texi
@@ -17,12 +17,8 @@ mingw, MSVC 14.
Portability problems not fixed by Gnulib:
@itemize
@item
-If the argument is a read-only file descriptor, this function fails
+If the argument is a file descriptor that lacks write access,
+such as a directory file descriptor, this function fails
with @code{EBADF} on some platforms:
-AIX 7.2, Cygwin 2.9.
-
-@item
-If the argument is a directory file descriptor, this function fails with
-@code{EBADF} on some platforms:
-AIX 7.3.
+AIX 7.3, Cygwin 3.6.x.
@end itemize
--
2.48.1