_PC_MIN_HOLE_SIZE pathconf() Re: Cygwin api to punch a hole into a file?
Cedric Blancher
cedric.blancher@gmail.com
Fri Dec 1 10:44:30 GMT 2023
On Tue, 28 Nov 2023 at 11:30, Corinna Vinschen via Cygwin
<cygwin@cygwin.com> wrote:
>
> 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.
Could you please implement _PC_MIN_HOLE_SIZE in pathconf(), so that
people can query the minimum hole size for a (path in a) filesystem?
Should return nothing for FAT and NFSv3, should work on NTFS and
NFSv4.2
Ced
--
Cedric Blancher <cedric.blancher@gmail.com>
[https://plus.google.com/u/0/+CedricBlancher/]
Institute Pasteur
More information about the Cygwin
mailing list