* [PATCH 1/2] libext2fs: use F_GETFL, not F_GETFD, in unixfd_open
@ 2025-08-28 14:43 Darrick J. Wong
2025-08-28 14:46 ` [PATCH 2/2] libext2fs: don't look for O_EXCL in the F_GETFL output Darrick J. Wong
0 siblings, 1 reply; 2+ messages in thread
From: Darrick J. Wong @ 2025-08-28 14:43 UTC (permalink / raw)
To: Theodore Ts'o; +Cc: linux-ext4
From: Darrick J. Wong <djwong@kernel.org>
F_GETFD is the fcntl command that returns FD_* flags, but the callsite
wants to look at the O_* flags. F_GETFL is the fcntl command that
returns the O_* flags, so change the subcommand to be correct.
Cc: <linux-ext4@vger.kernel.org> # v1.43.2
Fixes: 4ccf9e4fe165cf ("libext2fs: add unixfd_io_manager")
Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
---
lib/ext2fs/unix_io.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/ext2fs/unix_io.c b/lib/ext2fs/unix_io.c
index 4a841f7f2133d4..e839628aa1b74d 100644
--- a/lib/ext2fs/unix_io.c
+++ b/lib/ext2fs/unix_io.c
@@ -1168,7 +1168,7 @@ static errcode_t unixfd_open(const char *str_fd, int flags,
fd = atoi(str_fd);
#if defined(HAVE_FCNTL)
- fd_flags = fcntl(fd, F_GETFD);
+ fd_flags = fcntl(fd, F_GETFL);
if (fd_flags == -1)
return EBADF;
^ permalink raw reply related [flat|nested] 2+ messages in thread* [PATCH 2/2] libext2fs: don't look for O_EXCL in the F_GETFL output
2025-08-28 14:43 [PATCH 1/2] libext2fs: use F_GETFL, not F_GETFD, in unixfd_open Darrick J. Wong
@ 2025-08-28 14:46 ` Darrick J. Wong
0 siblings, 0 replies; 2+ messages in thread
From: Darrick J. Wong @ 2025-08-28 14:46 UTC (permalink / raw)
To: Theodore Ts'o; +Cc: linux-ext4
From: Darrick J. Wong <djwong@kernel.org>
For decades, Linux has never propagated O_EXCL into the user-visible
file flags in do_dentry_open:
f->f_flags &= ~(O_CREAT | O_EXCL | O_NOCTTY | O_TRUNC);
Therefore, one cannot use F_GETFL to determine if the file was opened
with O_EXCL. The unixfd IO manager will have to trust that the caller
opened the file in O_EXCL mode. Without this patch, the upcoming flock
patch will not work correctly in determining the lock mode to keep other
copies of fuse4fs and/or systemd from touching a fuse4fs mounted
filesystem.
Cc: <linux-ext4@vger.kernel.org> # v1.43.2
Fixes: 4ccf9e4fe165cf ("libext2fs: add unixfd_io_manager")
Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
---
lib/ext2fs/unix_io.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/lib/ext2fs/unix_io.c b/lib/ext2fs/unix_io.c
index e839628aa1b74d..55007ad7d2ae15 100644
--- a/lib/ext2fs/unix_io.c
+++ b/lib/ext2fs/unix_io.c
@@ -1172,11 +1172,10 @@ static errcode_t unixfd_open(const char *str_fd, int flags,
if (fd_flags == -1)
return EBADF;
- flags = 0;
+ /* O_EXCL is cleared by Linux at open and not returned by F_GETFL */
+ flags &= IO_FLAG_EXCLUSIVE;
if (fd_flags & O_RDWR)
flags |= IO_FLAG_RW;
- if (fd_flags & O_EXCL)
- flags |= IO_FLAG_EXCLUSIVE;
#if defined(O_DIRECT)
if (fd_flags & O_DIRECT)
flags |= IO_FLAG_DIRECT_IO;
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2025-08-28 14:46 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-28 14:43 [PATCH 1/2] libext2fs: use F_GETFL, not F_GETFD, in unixfd_open Darrick J. Wong
2025-08-28 14:46 ` [PATCH 2/2] libext2fs: don't look for O_EXCL in the F_GETFL output Darrick J. Wong
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).