device: 0.942 performance: 0.922 files: 0.913 graphic: 0.898 PID: 0.896 socket: 0.848 network: 0.827 ppc: 0.822 architecture: 0.814 semantic: 0.798 mistranslation: 0.788 kernel: 0.778 vnc: 0.751 register: 0.745 peripherals: 0.706 TCG: 0.692 debug: 0.686 x86: 0.677 hypervisor: 0.656 user-level: 0.652 VMM: 0.652 permissions: 0.648 risc-v: 0.630 arm: 0.629 boot: 0.624 i386: 0.616 KVM: 0.584 assembly: 0.467 virtual: 0.462 export/fuse/fuse.c:fuse_fallocate does not do anything but returns success Description of problem: block/export/fuse.c:fuse_fallocate with `FALLOC_FL_PUNCH_HOLE` does not do anything even though it returns 0 (success). A later read incorrectly returns old data instead of zeros. Should probably return EOPNOTSUPP. FALLOC_FL_PUNCH_HOLE: >Within the specified range, partial filesystem blocks are zeroed, and whole filesystem blocks are removed from the file. After a successful call, subsequent reads from this range will return zeros. https://man7.org/linux/man-pages/man2/fallocate.2.html Steps to reproduce: ```sh touch /tmp/data /tmp/fuse_exp dd if=/dev/random of=/tmp/data count=1000 bs=1M qemu-storage-daemon --blockdev node-name=node0,driver=raw,file.driver=file,file.filename=/tmp/data --export type=fuse,id=node0-export,node-name=node0,mountpoint=/tmp/fuse_exp,writable=on hexdump /tmp/fuse_exp -n 16 # 0000000 4d5f db2d 57ab 02f6 f9c2 d2f1 0c1b 4b86 fallocate -l 1G --punch-hole /tmp/fuse_exp echo $? # 0 hexdump /tmp/fuse_exp -n 16 # 0000000 4d5f db2d 57ab 02f6 f9c2 d2f1 0c1b 4b86 hexdump /tmp/data -n 16 # 0000000 4d5f db2d 57ab 02f6 f9c2 d2f1 0c1b 4b86 fallocate -l 1G --punch-hole /tmp/data hexdump /tmp/data -n 16 # 0000000 0000 0000 0000 0000 0000 0000 0000 0000 # sudo bpftrace -e 'uretprobe:/usr/bin/qemu-storage-daemon:blk_co_pdiscard { printf("ret=%d\n",retval); }' # ret=0 # sudo bpftrace -e 'kretfunc:fuse_file_fallocate { printf("len=%d \t mode=%d ret=%d\n", args->length , args->mode,retval); }' # len=1073741824 mode=3 ret=0 ```