[PATCH] fallocate: allow O_CREATE if mode is FALLOC_FL_WRITE_ZEROES

Lukas Herbolt <[email protected]> Wed, 1 Oct 2025 13:54:50 +0200
Newsgroups org.kernel.vger.util-linux
Message-ID <[email protected]>
With the new flag we can create the ZEROED allcoated files directly and not 
in the two steps. Removing FALLOC_FL_WRITE_ZEROES from the flags of not using
O_CREATE on open().

Signed-off-by: Lukas Herbolt <[email protected]>
---
 sys-utils/fallocate.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sys-utils/fallocate.c b/sys-utils/fallocate.c
index f06009483..686e4925e 100644
--- a/sys-utils/fallocate.c
+++ b/sys-utils/fallocate.c
@@ -408,7 +408,7 @@ int main(int argc, char **argv)
 
 	/* O_CREAT makes sense only for the default fallocate(2) behavior
 	 * when mode is no specified and new space is allocated */
-	fd = open(filename, O_RDWR | (!dig && !mode ? O_CREAT : 0),
+	fd = open(filename, O_RDWR | (!dig && !(mode & ~FALLOC_FL_WRITE_ZEROES) ? O_CREAT : 0),
 		  S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
 	if (fd < 0)
 		err(EXIT_FAILURE, _("cannot open %s"), filename);
-- 
2.51.0