From: "Darrick J. Wong" <djwong@kernel.org>
To: Zhang Yi <yi.zhang@huaweicloud.com>
Cc: linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org,
dm-devel@lists.linux.dev, linux-nvme@lists.infradead.org,
linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-api@vger.kernel.org, hch@lst.de, tytso@mit.edu,
bmarzins@redhat.com, chaitanyak@nvidia.com,
shinichiro.kawasaki@wdc.com, brauner@kernel.org,
martin.petersen@oracle.com, yi.zhang@huawei.com,
chengzhihao1@huawei.com, yukuai3@huawei.com,
yangerkun@huawei.com
Subject: Re: [PATCH util-linux v2] fallocate: add FALLOC_FL_WRITE_ZEROES support
Date: Thu, 14 Aug 2025 09:52:18 -0700 [thread overview]
Message-ID: <20250814165218.GQ7942@frogsfrogsfrogs> (raw)
In-Reply-To: <20250813024015.2502234-1-yi.zhang@huaweicloud.com>
On Wed, Aug 13, 2025 at 10:40:15AM +0800, Zhang Yi wrote:
> From: Zhang Yi <yi.zhang@huawei.com>
>
> The Linux kernel (since version 6.17) supports FALLOC_FL_WRITE_ZEROES in
> fallocate(2). Add support for FALLOC_FL_WRITE_ZEROES to the fallocate
> utility by introducing a new option -w|--write-zeroes.
>
> Link: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=278c7d9b5e0c
> Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
> ---
> v1->v2:
> - Minor description modification to align with the kernel.
>
> sys-utils/fallocate.1.adoc | 11 +++++++++--
> sys-utils/fallocate.c | 20 ++++++++++++++++----
> 2 files changed, 25 insertions(+), 6 deletions(-)
>
> diff --git a/sys-utils/fallocate.1.adoc b/sys-utils/fallocate.1.adoc
> index 44ee0ef4c..0ec9ff9a9 100644
> --- a/sys-utils/fallocate.1.adoc
> +++ b/sys-utils/fallocate.1.adoc
> @@ -12,7 +12,7 @@ fallocate - preallocate or deallocate space to a file
<snip all the long lines>
> +*-w*, *--write-zeroes*::
> +Zeroes space in the byte range starting at _offset_ and continuing
> for _length_ bytes. Within the specified range, blocks are
> preallocated for the regions that span the holes in the file. After a
> successful call, subsequent reads from this range will return zeroes,
> subsequent writes to that range do not require further changes to the
> file mapping metadata.
"...will return zeroes and subsequent writes to that range..." ?
> ++
> +Zeroing is done within the filesystem by preferably submitting write
I think we should say less about what the filesystem actually does to
preserve some flexibility:
"Zeroing is done within the filesystem. The filesystem may use a
hardware accelerated zeroing command, or it may submit regular writes.
The behavior depends on the filesystem design and available hardware."
> zeores commands, the alternative way is submitting actual zeroed data,
> the specified range will be converted into written extents. The write
> zeroes command is typically faster than write actual data if the
> device supports unmap write zeroes, the specified range will not be
> physically zeroed out on the device.
> ++
> +Options *--keep-size* can not be specified for the write-zeroes
> operation.
> +
> include::man-common/help-version.adoc[]
>
> == AUTHORS
> diff --git a/sys-utils/fallocate.c b/sys-utils/fallocate.c
> index 13bf52915..8d37fdad7 100644
> --- a/sys-utils/fallocate.c
> +++ b/sys-utils/fallocate.c
> @@ -40,7 +40,7 @@
> #if defined(HAVE_LINUX_FALLOC_H) && \
> (!defined(FALLOC_FL_KEEP_SIZE) || !defined(FALLOC_FL_PUNCH_HOLE) || \
> !defined(FALLOC_FL_COLLAPSE_RANGE) || !defined(FALLOC_FL_ZERO_RANGE) || \
> - !defined(FALLOC_FL_INSERT_RANGE))
> + !defined(FALLOC_FL_INSERT_RANGE) || !defined(FALLOC_FL_WRITE_ZEROES))
> # include <linux/falloc.h> /* non-libc fallback for FALLOC_FL_* flags */
> #endif
>
> @@ -65,6 +65,10 @@
> # define FALLOC_FL_INSERT_RANGE 0x20
> #endif
>
> +#ifndef FALLOC_FL_WRITE_ZEROES
> +# define FALLOC_FL_WRITE_ZEROES 0x80
> +#endif
> +
> #include "nls.h"
> #include "strutils.h"
> #include "c.h"
> @@ -94,6 +98,7 @@ static void __attribute__((__noreturn__)) usage(void)
> fputs(_(" -o, --offset <num> offset for range operations, in bytes\n"), out);
> fputs(_(" -p, --punch-hole replace a range with a hole (implies -n)\n"), out);
> fputs(_(" -z, --zero-range zero and ensure allocation of a range\n"), out);
> + fputs(_(" -w, --write-zeroes write zeroes and ensure allocation of a range\n"), out);
> #ifdef HAVE_POSIX_FALLOCATE
> fputs(_(" -x, --posix use posix_fallocate(3) instead of fallocate(2)\n"), out);
> #endif
> @@ -304,6 +309,7 @@ int main(int argc, char **argv)
> { "dig-holes", no_argument, NULL, 'd' },
> { "insert-range", no_argument, NULL, 'i' },
> { "zero-range", no_argument, NULL, 'z' },
> + { "write-zeroes", no_argument, NULL, 'w' },
> { "offset", required_argument, NULL, 'o' },
> { "length", required_argument, NULL, 'l' },
> { "posix", no_argument, NULL, 'x' },
> @@ -312,8 +318,8 @@ int main(int argc, char **argv)
> };
>
> static const ul_excl_t excl[] = { /* rows and cols in ASCII order */
> - { 'c', 'd', 'i', 'p', 'x', 'z'},
> - { 'c', 'i', 'n', 'x' },
> + { 'c', 'd', 'i', 'p', 'w', 'x', 'z'},
> + { 'c', 'i', 'n', 'w', 'x' },
> { 0 }
> };
> int excl_st[ARRAY_SIZE(excl)] = UL_EXCL_STATUS_INIT;
> @@ -323,7 +329,7 @@ int main(int argc, char **argv)
> textdomain(PACKAGE);
> close_stdout_atexit();
>
> - while ((c = getopt_long(argc, argv, "hvVncpdizxl:o:", longopts, NULL))
> + while ((c = getopt_long(argc, argv, "hvVncpdizwxl:o:", longopts, NULL))
> != -1) {
>
> err_exclusive_options(c, longopts, excl, excl_st);
> @@ -353,6 +359,9 @@ int main(int argc, char **argv)
> case 'z':
> mode |= FALLOC_FL_ZERO_RANGE;
> break;
> + case 'w':
> + mode |= FALLOC_FL_WRITE_ZEROES;
> + break;
> case 'x':
> #ifdef HAVE_POSIX_FALLOCATE
> posix = 1;
> @@ -429,6 +438,9 @@ int main(int argc, char **argv)
> else if (mode & FALLOC_FL_ZERO_RANGE)
> fprintf(stdout, _("%s: %s (%ju bytes) zeroed.\n"),
> filename, str, length);
> + else if (mode & FALLOC_FL_WRITE_ZEROES)
> + fprintf(stdout, _("%s: %s (%ju bytes) write zeroed.\n"),
"write zeroed" is a little strange, but I don't have a better
suggestion. :)
--D
> + filename, str, length);
> else
> fprintf(stdout, _("%s: %s (%ju bytes) allocated.\n"),
> filename, str, length);
> --
> 2.39.2
>
>
next prev parent reply other threads:[~2025-08-14 16:52 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-13 2:40 [PATCH util-linux v2] fallocate: add FALLOC_FL_WRITE_ZEROES support Zhang Yi
2025-08-14 16:52 ` Darrick J. Wong [this message]
2025-08-15 9:29 ` Zhang Yi
2025-08-15 14:29 ` Darrick J. Wong
2025-08-18 2:17 ` Zhang Yi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250814165218.GQ7942@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=bmarzins@redhat.com \
--cc=brauner@kernel.org \
--cc=chaitanyak@nvidia.com \
--cc=chengzhihao1@huawei.com \
--cc=dm-devel@lists.linux.dev \
--cc=hch@lst.de \
--cc=linux-api@vger.kernel.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=shinichiro.kawasaki@wdc.com \
--cc=tytso@mit.edu \
--cc=yangerkun@huawei.com \
--cc=yi.zhang@huawei.com \
--cc=yi.zhang@huaweicloud.com \
--cc=yukuai3@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.