summary refs log tree commit diff stats
path: root/gitlab/issues_text/target_missing/host_missing/accel_missing/1507
diff options
context:
space:
mode:
Diffstat (limited to 'gitlab/issues_text/target_missing/host_missing/accel_missing/1507')
-rw-r--r--gitlab/issues_text/target_missing/host_missing/accel_missing/150737
1 files changed, 37 insertions, 0 deletions
diff --git a/gitlab/issues_text/target_missing/host_missing/accel_missing/1507 b/gitlab/issues_text/target_missing/host_missing/accel_missing/1507
new file mode 100644
index 000000000..f2ff75793
--- /dev/null
+++ b/gitlab/issues_text/target_missing/host_missing/accel_missing/1507
@@ -0,0 +1,37 @@
+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
+```