aboutsummaryrefslogtreecommitdiff
path: root/emulators/qemu8/files/patch-block_export_fuse.c
diff options
context:
space:
mode:
Diffstat (limited to 'emulators/qemu8/files/patch-block_export_fuse.c')
-rw-r--r--emulators/qemu8/files/patch-block_export_fuse.c69
1 files changed, 69 insertions, 0 deletions
diff --git a/emulators/qemu8/files/patch-block_export_fuse.c b/emulators/qemu8/files/patch-block_export_fuse.c
new file mode 100644
index 000000000000..03b9cc8b5994
--- /dev/null
+++ b/emulators/qemu8/files/patch-block_export_fuse.c
@@ -0,0 +1,69 @@
+--- block/export/fuse.c.orig 2023-12-19 21:24:34 UTC
++++ block/export/fuse.c
+@@ -690,12 +690,6 @@ static void fuse_fallocate(fuse_req_t req, fuse_ino_t
+ return;
+ }
+
+-#ifdef CONFIG_FALLOCATE_PUNCH_HOLE
+- if (mode & FALLOC_FL_KEEP_SIZE) {
+- length = MIN(length, blk_len - offset);
+- }
+-#endif /* CONFIG_FALLOCATE_PUNCH_HOLE */
+-
+ if (!mode) {
+ /* We can only fallocate at the EOF with a truncate */
+ if (offset < blk_len) {
+@@ -715,53 +709,6 @@ static void fuse_fallocate(fuse_req_t req, fuse_ino_t
+ ret = fuse_do_truncate(exp, offset + length, true,
+ PREALLOC_MODE_FALLOC);
+ }
+-#ifdef CONFIG_FALLOCATE_PUNCH_HOLE
+- else if (mode & FALLOC_FL_PUNCH_HOLE) {
+- if (!(mode & FALLOC_FL_KEEP_SIZE)) {
+- fuse_reply_err(req, EINVAL);
+- return;
+- }
+-
+- do {
+- int size = MIN(length, BDRV_REQUEST_MAX_BYTES);
+-
+- ret = blk_pwrite_zeroes(exp->common.blk, offset, size,
+- BDRV_REQ_MAY_UNMAP | BDRV_REQ_NO_FALLBACK);
+- if (ret == -ENOTSUP) {
+- /*
+- * fallocate() specifies to return EOPNOTSUPP for unsupported
+- * operations
+- */
+- ret = -EOPNOTSUPP;
+- }
+-
+- offset += size;
+- length -= size;
+- } while (ret == 0 && length > 0);
+- }
+-#endif /* CONFIG_FALLOCATE_PUNCH_HOLE */
+-#ifdef CONFIG_FALLOCATE_ZERO_RANGE
+- else if (mode & FALLOC_FL_ZERO_RANGE) {
+- if (!(mode & FALLOC_FL_KEEP_SIZE) && offset + length > blk_len) {
+- /* No need for zeroes, we are going to write them ourselves */
+- ret = fuse_do_truncate(exp, offset + length, false,
+- PREALLOC_MODE_OFF);
+- if (ret < 0) {
+- fuse_reply_err(req, -ret);
+- return;
+- }
+- }
+-
+- do {
+- int size = MIN(length, BDRV_REQUEST_MAX_BYTES);
+-
+- ret = blk_pwrite_zeroes(exp->common.blk,
+- offset, size, 0);
+- offset += size;
+- length -= size;
+- } while (ret == 0 && length > 0);
+- }
+-#endif /* CONFIG_FALLOCATE_ZERO_RANGE */
+ else {
+ ret = -EOPNOTSUPP;
+ }