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