[Devel] [PATCH 1/1] ploop: remove unnecessary flushes from ploop/dm-ploop code

Denis V. Lunev den at openvz.org
Mon Sep 9 20:47:52 MSK 2024


This patch drops vfs_flush just once the image has been fallocated.
This is not required as fallocate returns once all internal checks
are done and the file has been properly enlarged.

In general, this follows userspace pattern. We should flush when and
only when the guest sends barrier. It is ready to loose this data
if something will go wrong due to the guest filesystem facilities
like journal.

Signed-off-by: Denis V. Lunev <den at openvz.org>
CC: Alexey Kuznetsov <kuznet at virtuozzo.com>
CC: Alexander Atanasov <alexander.atanasov at virtuozzo.com>
CC: Andrey Zhadchenko <andrey.zhadchenko at virtuozzo.com>
---
 drivers/md/dm-ploop-map.c | 17 -----------------
 drivers/md/dm-qcow2-map.c | 17 +----------------
 2 files changed, 1 insertion(+), 33 deletions(-)

diff --git a/drivers/md/dm-ploop-map.c b/drivers/md/dm-ploop-map.c
index 33aac1a69fdf..0809867ebd3a 100644
--- a/drivers/md/dm-ploop-map.c
+++ b/drivers/md/dm-ploop-map.c
@@ -1020,12 +1020,6 @@ static int ploop_truncate_prealloc_safe(struct ploop *ploop,
 		return ret;
 	}
 
-	ret = vfs_fsync(file, 0);
-	if (ret) {
-		PL_ERR("%s->fsync(): %d", func, ret);
-		return ret;
-	}
-
 	delta->file_size = new_len;
 	delta->file_preallocated_area_start = len;
 	return 0;
@@ -1071,17 +1065,6 @@ static int ploop_allocate_cluster(struct ploop *ploop, u32 *dst_clu)
 		ret = ploop_truncate_prealloc_safe(ploop, top, end, __func__);
 		if (ret)
 			return ret;
-	} else if (pos < top->file_preallocated_area_start) {
-		/*
-		 * Flush punch_hole()/zero_range() modifications.
-		 * TODO: track recentry unused blocks and do that
-		 * in background.
-		 */
-		ret = vfs_fsync(file, 0);
-		if (ret) {
-			PL_ERR("fsync: %d", ret);
-			return ret;
-		}
 	}
 
 	if (end > top->file_preallocated_area_start)
diff --git a/drivers/md/dm-qcow2-map.c b/drivers/md/dm-qcow2-map.c
index 137fb9a270cd..992a962d8eaf 100644
--- a/drivers/md/dm-qcow2-map.c
+++ b/drivers/md/dm-qcow2-map.c
@@ -2141,13 +2141,7 @@ static loff_t find_unused_cluster(struct qcow2 *qcow2, struct qio **qio,
 
 int qcow2_truncate_safe(struct file *file, loff_t new_len)
 {
-	int ret;
-
-	ret = vfs_truncate2(&file->f_path, new_len, file);
-	if (ret)
-		return ret;
-
-	return vfs_fsync(file, 0);
+	return vfs_truncate2(&file->f_path, new_len, file);
 }
 
 static int truncate_prealloc_safe(struct qcow2 *qcow2, loff_t len, const char *func)
@@ -2416,15 +2410,6 @@ static loff_t allocate_cluster(struct qcow2 *qcow2, struct qio *qio,
 		ret = truncate_prealloc_safe(qcow2, end, __func__);
 		if (ret)
 			return ret;
-	} else if (pos < qcow2->file_preallocated_area_start) {
-		/*
-		 * Flush punch_hole() modifications.
-		 * TODO: track recentry unused blocks
-		 * and punch holes in background.
-		 */
-		ret = vfs_fsync(file, 0);
-		if (ret)
-			return ret;
 	}
 
 	if (end > qcow2->file_preallocated_area_start)
-- 
2.43.5



More information about the Devel mailing list