From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2155) id D9E393858012; Tue, 28 Nov 2023 10:29:52 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D9E393858012 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cygwin.com; s=default; t=1701167392; bh=2WkBVK7AiSJ2JJ+PJDYnSRSU9j7+RkBv5r2L5nJ0MaU=; h=Date:From:To:Subject:Reply-To:References:In-Reply-To:From; b=aDI37LofZxRAFvb/urDN1Bg8PM3EImfGjgcglJZsRSvX4af3Z/2uJCxHJw95+QvIO paTOhQfwU4LTSBRWfblzYhLUOD0qgOChGMIRlN5bzQsq5BHjiqJgySHZ32kAv7vGkZ wukJX3sX6qEl2u0OnelOEB6nwGTeEOUhShwK5xtI= Received: by calimero.vinschen.de (Postfix, from userid 500) id 09798A80A50; Tue, 28 Nov 2023 11:29:51 +0100 (CET) Date: Tue, 28 Nov 2023 11:29:51 +0100 From: Corinna Vinschen To: cygwin@cygwin.com Subject: Re: Cygwin api to punch a hole into a file? Message-ID: Reply-To: cygwin@cygwin.com Mail-Followup-To: cygwin@cygwin.com References: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: List-Id: 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