From c6f1fa9e29c844c64095caff66eab53a3f05669d Mon Sep 17 00:00:00 2001 From: zhang-daiyue Date: Thu, 11 Jan 2024 23:03:56 +0800 Subject: [PATCH] Fix hmdfs upper inode size Signed-off-by: zhang-daiyue Change-Id: I0a7d53664400a08fd336efc8ad0808b07b7089ff --- fs/hmdfs/file_local.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/fs/hmdfs/file_local.c b/fs/hmdfs/file_local.c index c563ea44ade1..aaab5837b71b 100644 --- a/fs/hmdfs/file_local.c +++ b/fs/hmdfs/file_local.c @@ -20,6 +20,17 @@ #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; @@ -49,6 +60,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); if (file->f_flags & (O_RDWR | O_WRONLY)) atomic_inc(&info->write_opened); } -- Gitee