Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 07 Mar 2011 19:50:49 +0100
From:      Attila Nagy <bra@fsn.hu>
To:        Pawel Jakub Dawidek <pjd@FreeBSD.org>
Cc:        freebsd-fs@freebsd.org
Subject:   Re: Punching holes into (sparse) files - porting Solaris fcntl(F_FREESP) to FreeBSD?
Message-ID:  <4D752909.3050503@fsn.hu>
In-Reply-To: <20110306084217.GA9791@garage.freebsd.pl>
References:  <4D710154.90409@fsn.hu> <20110306084217.GA9791@garage.freebsd.pl>

next in thread | previous in thread | raw e-mail | index | archive | help
  On 03/06/2011 09:54 AM, Pawel Jakub Dawidek wrote:
> On Fri, Mar 04, 2011 at 04:12:20PM +0100, Attila Nagy wrote:
>> Hi,
>>
>> Is it possible to make regions of files, with already written data
>> sparse? (I'm interested to do this on ZFS)
>>
>> All I could find in this topic is:
>> http://www.mail-archive.com/zfs-discuss@opensolaris.org/msg29047.html
>>
>> grepping through the source gives a match for VOP_SPACE in
>> cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_replay.c:
>> zfs_replay_truncate(zfsvfs_t *zfsvfs, lr_truncate_t *lr, boolean_t byteswap)
>> {
>> #ifdef sun
>> [...]
>>          error = VOP_SPACE(ZTOV(zp), F_FREESP,&fl, FWRITE | FOFFMAX,
>>              lr->lr_offset, kcred, NULL);
>>
>> And the relevant section from fcntl(2) in Solaris:
>>       F_FREESP
>>
>>           Free storage space associated  with  a  section  of  the
>>           ordinary  file  fildes.  The  section  is specified by a
>>           variable of data type struct flock pointed  to  by  arg.
>>           The  data  type struct flock is defined in the<fcntl.h>
>>           header (see fcntl.h(3HEAD)) and is described below. Note
>>           that  all  file  systems  might not support all possible
>>           variations of F_FREESP arguments.  In  particular,  many
>>           file  systems allow space to be freed only at the end of
>>           a file.
>>
>> F_FREESP seems to be my friend, and it's implemented in Solaris's ZFS.
>> How hard would it be to complete the port and make it accessible from
>> FreeBSD?
>> I guess it was left out with a reason...
> Well, adding new VOP is important decision. We could eventually
> implement this via ioctl(2), I think... This is a nice feature after all.
>
> I don't know why do you need this, but note that when compression is
> enabled on a ZFS file system, all-zeros blocks are turned into holes, so
> if you do have compression enabled and you write all zeros in the place
> you want to punch a hole, the pool space should be reclaimed.
>
I would like to use it for integer-indexed fixed size storage, where the 
given block can be accessed by multiplying the block size with the index 
number.
A sparse file would allow to reclaim freed blocks' space.

But with SEEK_HOLE and SEEK_DATA, and the promised efficiency of sparse 
files on ZFS I guess there are a lot more use cases than before (for 
sparse files).
Thanks for the info about compression, I didn't know that. Should I 
assume that using compression and writing blocksize number of zeroes is 
efficient as F_FREESP?

Thanks,



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4D752909.3050503>