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.blanc...@gmail.com> [https://plus.google.com/u/0/+CedricBlancher/] Institute Pasteur -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple