From: Corinna Vinschen <corinna-cygwin@cygwin.com>
To: cygwin@cygwin.com
Subject: Re: Cygwin api to punch a hole into a file?
Date: Tue, 28 Nov 2023 11:29:51 +0100 [thread overview]
Message-ID: <ZWXBH_viPFuSF6be@calimero.vinschen.de> (raw)
In-Reply-To: <ZWCCfqny4lC11bBJ@calimero.vinschen.de>
On Nov 24 12:01, Corinna Vinschen via Cygwin wrote:
> On Nov 23 23:36, Cedric Blancher via Cygwin wrote:
> > Linux has fallocate(fd, FALLOC_FL_PUNCH_HOLE|FALLOC_FL_KEEP_SIZE, ...)
> > to punch a hole into a file, i.e. deallocate the blocks given and make
> > the file a "sparse file".
>
> We don't support the Linux-specific fallocate(2) call, only ftruncate(2)
> and posix_fallocate(3). Patches, as usual, thoughtfully considered.
The next test release cygwin-3.5.0-0.485.g65831f88d6c4 introduces
the Linux-specific fallocate(2) call. Naturally we can't support
all flags, but the following flag combinations are allowed:
- 0 same as posix_fallocate(3)
- FALLOC_FL_KEEP_SIZE
- FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE
- FALLOC_FL_ZERO_RANGE
- FALLOC_FL_ZERO_RANGE | FALLOC_FL_KEEP_SIZE
A few comments:
- With 0 and FALLOC_FL_KEEP_SIZE, sparse blocks in the given range
are re-allocated as per the POSIX requirements. For that, it uses
the same code as FALLOC_FL_ZERO_RANGE, but only for the holes within
the range.
- With FALLOC_FL_KEEP_SIZE, over-allocation is done by setting
the allocation size of a file while keeping EOF the same.
However, in contrast to your typical Linux filesystem, over-
allocation on Windows filesystems is only temporary. The
over-allocated blocks are returned to free blocks as soon as
the last HANDLE to the file is closed.
- With FALLOC_FL_KEEP_SIZE, no over-allocation is performed on sparse
files. The reason is that over-allocation on sparse files has no
effect on Windows.
- FALLOC_FL_ZERO_RANGE is implemented as writing zeros to the
given range. For parts of the range which are already allocated
data blocks, as much zeros are written as necessary. For holes
in sparse files, only a single zero byte is written to the
hole per 64K chunk, which is the allocation granularity of
sparse files.
- FALLOC_FL_ZERO_RANGE is NOT atomic.
Please give it a try.
Corinna
next prev parent reply other threads:[~2023-11-28 10:29 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-23 22:36 Cedric Blancher
2023-11-24 11:01 ` Corinna Vinschen
2023-11-28 10:29 ` Corinna Vinschen [this message]
2023-12-01 10:22 ` Cedric Blancher
2023-12-01 11:02 ` Corinna Vinschen
2023-12-04 16:07 ` Andrey Repin
2023-12-05 6:36 ` Thomas Wolff
2023-12-05 13:53 ` Corinna Vinschen
2023-12-05 14:40 ` Thomas Wolff
2023-12-05 14:47 ` Thomas Wolff
2023-12-05 15:15 ` Corinna Vinschen
2023-12-01 10:44 ` _PC_MIN_HOLE_SIZE pathconf() " Cedric Blancher
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=ZWXBH_viPFuSF6be@calimero.vinschen.de \
--to=corinna-cygwin@cygwin.com \
--cc=cygwin@cygwin.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 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 read-only IMAP folder(s) and NNTP newsgroup(s).