5 patches with various fixes and refactoring:
- fix for fragmented case
- remove old code
- fix double locking
- hide internal function
- refactor function
Konstantin Komarov (5):
fs/ntfs3: Fix very fragmented case in attr_punch_hole
fs/ntfs3: Remove unused mi_mark_free
fs/ntfs3: Add new argument is_mft to ntfs_mark_rec_free
fs/ntfs3: Make static function attr_load_runs
fs/ntfs3: Fill duplicate info in ni_add_name
fs/ntfs3/attrib.c | 17 ++++++++++++++---
fs/ntfs3/frecord.c | 32 ++++++++++++++++++++------------
fs/ntfs3/fsntfs.c | 9 ++++++---
fs/ntfs3/inode.c | 12 +-----------
fs/ntfs3/namei.c | 2 +-
fs/ntfs3/ntfs_fs.h | 5 +----
fs/ntfs3/record.c | 22 ----------------------
fs/ntfs3/super.c | 2 +-
8 files changed, 44 insertions(+), 57 deletions(-)
--
2.37.0
In some cases we need to ni_find_attr attr_b
Signed-off-by: Konstantin Komarov <[email protected]>
---
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