From 68640d56b2ea96401a1355ab56603b0837058d21 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Tue, 22 Oct 2013 22:14:34 +0100 Subject: [PATCH 1/1] Avoid ext4 auto_da_alloc flush on close. Avoid annoying ext4 auto_da_alloc which causes a flush on close unless we are very careful about not truncating the file when it has zero size. (Thanks Eric Sandeen) --- pxzcat.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pxzcat.c b/pxzcat.c index 4ab8689..80a8820 100644 --- a/pxzcat.c +++ b/pxzcat.c @@ -165,9 +165,18 @@ xzfile_uncompress (const char *filename, const char *outputfile, size = lzma_index_uncompressed_size (idx); debug ("uncompressed size = %" PRIu64 " bytes", size); + /* Avoid annoying ext4 auto_da_alloc which causes a flush on close + * unless we are very careful about not truncating the file when it + * has zero size. (Thanks Eric Sandeen) + */ + unlink (outputfile); + ofd = open (outputfile, O_WRONLY|O_CREAT|O_TRUNC|O_NOCTTY, 0644); if (ofd == -1) error (EXIT_FAILURE, errno, "open: %s", outputfile); + /* See above about auto_da_alloc. */ + write (ofd, " ", 1); + if (ftruncate (ofd, size) == -1) error (EXIT_FAILURE, errno, "ftruncate: %s", outputfile); -- 1.8.3.1