Punching holes into (sparse) files - porting Solaris fcntl(F_FREESP) to FreeBSD?

Attila Nagy bra at fsn.hu
Fri Mar 4 15:12:23 UTC 2011


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...

Thanks,


More information about the freebsd-fs mailing list