From bec02e13c4f376220037c4ced6090f420d5fe519 Mon Sep 17 00:00:00 2001 From: liuzerun Date: Fri, 10 May 2024 08:04:43 +0000 Subject: [PATCH] merge_veiew update size Signed-off-by: liuzerun --- fs/hmdfs/file_local.c | 13 +------------ fs/hmdfs/file_merge.c | 1 + fs/hmdfs/inode.c | 12 ++++++++++++ fs/hmdfs/inode.h | 1 + 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/fs/hmdfs/file_local.c b/fs/hmdfs/file_local.c index aaab5837b71b..41f65cfa4184 100644 --- a/fs/hmdfs/file_local.c +++ b/fs/hmdfs/file_local.c @@ -20,17 +20,6 @@ #include "hmdfs_share.h" #include "hmdfs_trace.h" -static inline void update_upper_file(struct file *upper_file, struct file *lower_file) -{ - loff_t upper_size = i_size_read(upper_file->f_inode); - loff_t lower_size = i_size_read(lower_file->f_inode); - - if (upper_file->f_inode->i_mapping && upper_size != lower_size) { - i_size_write(upper_file->f_inode, lower_size); - truncate_inode_pages(upper_file->f_inode->i_mapping, 0); - } -} - int hmdfs_file_open_local(struct inode *inode, struct file *file) { int err = 0; @@ -60,7 +49,7 @@ int hmdfs_file_open_local(struct inode *inode, struct file *file) } else { gfi->lower_file = lower_file; file->private_data = gfi; - update_upper_file(file, lower_file); + hmdfs_update_upper_file(file, lower_file); if (file->f_flags & (O_RDWR | O_WRONLY)) atomic_inc(&info->write_opened); } diff --git a/fs/hmdfs/file_merge.c b/fs/hmdfs/file_merge.c index cbe9358247ce..8952674a23d4 100644 --- a/fs/hmdfs/file_merge.c +++ b/fs/hmdfs/file_merge.c @@ -567,6 +567,7 @@ int hmdfs_file_open_merge(struct inode *inode, struct file *file) } else { gfi->lower_file = lower_file; file->private_data = gfi; + hmdfs_update_upper_file(file, lower_file); } dput(parent); out_err: diff --git a/fs/hmdfs/inode.c b/fs/hmdfs/inode.c index 0b3ec919c3e7..93d29cc3e905 100644 --- a/fs/hmdfs/inode.c +++ b/fs/hmdfs/inode.c @@ -342,3 +342,15 @@ struct inode *hmdfs_iget_locked_root(struct super_block *sb, uint64_t root_ino, return iget5_locked(sb, ia.ino.ino_output, iget_test, iget_set, &ia); } + + +void hmdfs_update_upper_file(struct file *upper_file, struct file *lower_file) +{ + loff_t upper_size = i_size_read(upper_file->f_inode); + loff_t lower_size = i_size_read(lower_file->f_inode); + + if (upper_file->f_inode->i_mapping && upper_size != lower_size) { + i_size_write(upper_file->f_inode, lower_size); + truncate_inode_pages(upper_file->f_inode->i_mapping, 0); + } +} \ No newline at end of file diff --git a/fs/hmdfs/inode.h b/fs/hmdfs/inode.h index 8877a53a0110..fb9bd2929d58 100644 --- a/fs/hmdfs/inode.h +++ b/fs/hmdfs/inode.h @@ -259,5 +259,6 @@ struct inode *hmdfs_iget5_locked_cloud(struct super_block *sb, struct hmdfs_peer *peer, struct hmdfs_lookup_cloud_ret *res); +void hmdfs_update_upper_file(struct file *upper_file, struct file *lower_file); uint32_t make_ino_raw_cloud(uint8_t *cloud_id); #endif // INODE_H -- Gitee