lkml.org 
[lkml]   [2022]   [Jul]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
Subject[PATCH 1/5] fs/ntfs3: Fix very fragmented case in attr_punch_hole
From
In some cases we need to ni_find_attr attr_b

Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
---
fs/ntfs3/attrib.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/fs/ntfs3/attrib.c b/fs/ntfs3/attrib.c
index 59d8f482ef0a..43b9482f9830 100644
--- a/fs/ntfs3/attrib.c
+++ b/fs/ntfs3/attrib.c
@@ -2054,6 +2054,7 @@ int attr_punch_hole(struct ntfs_inode *ni, u64 vbo, u64 bytes, u32 *frame_size)
if (err)
goto out;
/* Layout of records maybe changed. */
+ attr_b = NULL;
}
}
/* Free all allocated memory. */
@@ -2073,6 +2074,14 @@ int attr_punch_hole(struct ntfs_inode *ni, u64 vbo, u64 bytes, u32 *frame_size)
}

total_size -= (u64)dealloc << sbi->cluster_bits;
+ if (!attr_b) {
+ attr_b = ni_find_attr(ni, NULL, NULL, ATTR_DATA, NULL, 0, NULL,
+ &mi_b);
+ if (!attr_b) {
+ err = -EINVAL;
+ goto out;
+ }
+ }
attr_b->nres.total_size = cpu_to_le64(total_size);
mi_b->dirty = true;

@@ -2083,8 +2092,10 @@ int attr_punch_hole(struct ntfs_inode *ni, u64 vbo, u64 bytes, u32 *frame_size)

out:
up_write(&ni->file.run_lock);
- if (err)
+ if (err) {
+ ntfs_set_state(sbi, NTFS_DIRTY_ERROR);
make_bad_inode(&ni->vfs_inode);
+ }

return err;
}
--
2.37.0

\
 
 \ /
  Last update: 2022-07-01 15:10    [W:0.069 / U:0.328 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site