Although Linux kernels before 5.7 would create a regular file when
opening a nonexistent file with O_CREAT | O_DIRECTORY, this behavior
was changed to something deeply buggy in 5.7, and when the bug was
fixed in 6.4 this combination of open flags became invalid.
Adjust the documentation to match the 6.4+ behavior,
which makes more sense anyway.
Signed-off-by: Paul Eggert <eggert@cs.ucla.edu>
Message-ID: <
20250530072029.344532-1-eggert@cs.ucla.edu>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
.TP
.B EINVAL
.B O_CREAT
+and
+.B O_DIRECTORY
+were both specified in
+.I flags ,
+and the Linux kernel version is 6.4 or later.
+(Earlier kernels were inconsistent in this area,
+and POSIX does not specify the behavior.)
+.TP
+.B EINVAL
+.B O_CREAT
was specified in
.I flags
and the final component ("basename") of the new file's
when trying to determine whether the kernel supports
.B O_TMPFILE
functionality.
-.P
-When both
-.B O_CREAT
-and
-.B O_DIRECTORY
-are specified in
-.I flags
-and the file specified by
-.I path
-does not exist,
-.BR open ()
-will create a regular file (i.e.,
-.B O_DIRECTORY
-is ignored).
.SH SEE ALSO
.BR chmod (2),
.BR chown (2),