• Richard W.M. Jones's avatar
    fuse: allow fallocate(FALLOC_FL_ZERO_RANGE) · 6b1bdb56
    Richard W.M. Jones authored
    The current fuse module filters out fallocate(FALLOC_FL_ZERO_RANGE)
    returning -EOPNOTSUPP.  libnbd's nbdfuse would like to translate
    FALLOC_FL_ZERO_RANGE requests into the NBD command
    NBD_CMD_WRITE_ZEROES which allows NBD servers that support it to do
    zeroing efficiently.
    
    This commit treats this flag exactly like FALLOC_FL_PUNCH_HOLE.
    
    A way to test this, requiring fuse >= 3, nbdkit >= 1.8 and the latest
    nbdfuse from https://gitlab.com/nbdkit/libnbd/-/tree/master/fuse is to
    create a file containing some data and "mirror" it to a fuse file:
    
      $ dd if=/dev/urandom of=disk.img bs=1M count=1
      $ nbdkit file disk.img
      $ touch mirror.img
      $ nbdfuse mirror.img nbd://localhost &
    
    (mirror.img -> nbdfuse -> NBD over loopback -> nbdkit -> disk.img)
    
    You can then run commands such as:
    
      $ fallocate -z -o 1024 -l 1024 mirror.img
    
    and check that the content of the original file ("disk.img") stays
    synchronized.  To show NBD commands, export LIBNBD_DEBUG=1 before
    running nbdfuse.  To clean up:
    
      $ fusermount3 -u mirror.img
      $ killall nbdkit
    Signed-off-by: default avatarRichard W.M. Jones <rjones@redhat.com>
    Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
    6b1bdb56
file.c 77.2 KB