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>