ocfs2: fix incorrect i_size of global bitmap inode after resize
PATCH 1/1 ocfs2: fix incorrect i_size of global bitmap inode after resize
Ocfs2 cluster size may be 1MB, which has 20 bits. When resize, the input new clusters is mostly the number of clusters in a group descriptor(32256).
Since the input clusters is defined as type int, so it will overflow when shift left 20 bits and then lead to incorrect global bitmap i_size.
Signed-off-by Joseph Qi <[email protected]>
--- fs/ocfs2/resize.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
fs/ocfs2/resize.c +2 -2
@@ -157,7 +157,7 @@ static int ocfs2_update_last_group_and_inode(handle_t *handle,spin_lock (&OCFS2_I (bm_inode)->ip_lock);OCFS2_I (bm_inode)->ip_clusters =le32_to_cpu (fe->i_clusters); -le64_add_cpu (&fe->i_size, new_clusters << osb->s_clustersize_bits); +le64_add_cpu (&fe->i_size, (u64 )new_clusters << osb->s_clustersize_bits);spin_unlock (&OCFS2_I (bm_inode)->ip_lock);i_size_write (bm_inode,le64_to_cpu (fe->i_size));
@@ -569,7 +569,7 @@ int ocfs2_group_add(struct inode *inode, struct ocfs2_new_group_input *input)spin_lock (&OCFS2_I (main_bm_inode)->ip_lock);OCFS2_I (main_bm_inode)->ip_clusters =le32_to_cpu (fe->i_clusters); -le64_add_cpu (&fe->i_size, input->clusters << osb->s_clustersize_bits); +le64_add_cpu (&fe->i_size, (u64 )input->clusters << osb->s_clustersize_bits);spin_unlock (&OCFS2_I (main_bm_inode)->ip_lock);i_size_write (main_bm_inode,le64_to_cpu (fe->i_size));
Signature · 1 line
1.8.4.3