diff --git a/fs/hmdfs/file_local.c b/fs/hmdfs/file_local.c index aaab5837b71b0b779272a2dbf851c5f6bd00bfb9..41f65cfa4184023e0cfcba5d5f9ad4a85d18e4d3 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 cbe9358247ce443e8099d8d1dd7c5857bf47aded..8952674a23d4c4fc8e7729dc1290e88cb3766ace 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 0b3ec919c3e7808e1d11dcdc0c14df3ac6fc5591..93d29cc3e905b21136e31637fc8bf1e97f30be89 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 8877a53a0110cb6d6a98350ae2ac3eba5a30675a..fb9bd2929d581e6e48dee17bd369962869440e02 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