Blame SOURCES/0095-fs-ntfs3-Keep-prealloc-for-all-types-of-files.patch

Kmods SIG d83023
From ce46ae0c3e31400dc89d1e4620a812647cab9c72 Mon Sep 17 00:00:00 2001
Kmods SIG d83023
From: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Kmods SIG d83023
Date: Fri, 1 Oct 2021 18:48:49 +0300
Kmods SIG d83023
Subject: [Backport ce46ae0c3e31] src: Keep prealloc for all types of
Kmods SIG d83023
 files
Kmods SIG d83023
Kmods SIG d83023
Before we haven't kept prealloc for sparse files because we thought that
Kmods SIG d83023
it will speed up create / write operations.
Kmods SIG d83023
It lead to situation, when user reserved some space for sparse file,
Kmods SIG d83023
filled volume, and wasn't able to write in reserved file.
Kmods SIG d83023
With this commit we keep prealloc.
Kmods SIG d83023
Now xfstest generic/274 pass.
Kmods SIG d83023
Fixes: be71b5cba2e6 ("src: Add attrib operations")
Kmods SIG d83023
Kmods SIG d83023
Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Kmods SIG d83023
---
Kmods SIG d83023
 src/attrib.c | 8 +-------
Kmods SIG d83023
 1 file changed, 1 insertion(+), 7 deletions(-)
Kmods SIG d83023
Kmods SIG d83023
diff --git a/src/attrib.c b/src/attrib.c
Kmods SIG d83023
index 8a00fa978f5f9c3d496bd333bf1ace72d9194f37..e8c00dda42adbbff372908fdcb3d7d6814567cdf 100644
Kmods SIG d83023
--- a/src/attrib.c
Kmods SIG d83023
+++ b/src/attrib.c
Kmods SIG d83023
@@ -447,11 +447,8 @@ int attr_set_size(struct ntfs_inode *ni, enum ATTR_TYPE type,
Kmods SIG d83023
 again_1:
Kmods SIG d83023
 	align = sbi->cluster_size;
Kmods SIG d83023
 
Kmods SIG d83023
-	if (is_ext) {
Kmods SIG d83023
+	if (is_ext)
Kmods SIG d83023
 		align <<= attr_b->nres.c_unit;
Kmods SIG d83023
-		if (is_attr_sparsed(attr_b))
Kmods SIG d83023
-			keep_prealloc = false;
Kmods SIG d83023
-	}
Kmods SIG d83023
 
Kmods SIG d83023
 	old_valid = le64_to_cpu(attr_b->nres.valid_size);
Kmods SIG d83023
 	old_size = le64_to_cpu(attr_b->nres.data_size);
Kmods SIG d83023
@@ -461,9 +458,6 @@ int attr_set_size(struct ntfs_inode *ni, enum ATTR_TYPE type,
Kmods SIG d83023
 	new_alloc = (new_size + align - 1) & ~(u64)(align - 1);
Kmods SIG d83023
 	new_alen = new_alloc >> cluster_bits;
Kmods SIG d83023
 
Kmods SIG d83023
-	if (keep_prealloc && is_ext)
Kmods SIG d83023
-		keep_prealloc = false;
Kmods SIG d83023
-
Kmods SIG d83023
 	if (keep_prealloc && new_size < old_size) {
Kmods SIG d83023
 		attr_b->nres.data_size = cpu_to_le64(new_size);
Kmods SIG d83023
 		mi_b->dirty = true;
Kmods SIG d83023
-- 
Kmods SIG d83023
2.31.1
Kmods SIG d83023