Use i_size_read() in ext4_ext_convert_to_initialized() and ext4_split_convert_extents() because we haven't taken inode->i_rwsem in these two functions. Signed-off-by: zhangyi (F) <yi.zhang@xxxxxxxxxx> --- fs/ext4/extents.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index 240b6de..0307fc6 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c @@ -3483,7 +3483,7 @@ static int ext4_ext_convert_to_initialized(handle_t *handle, (unsigned long long)map->m_lblk, map_len); sbi = EXT4_SB(inode->i_sb); - eof_block = (inode->i_size + inode->i_sb->s_blocksize - 1) >> + eof_block = (i_size_read(inode) + inode->i_sb->s_blocksize - 1) >> inode->i_sb->s_blocksize_bits; if (eof_block < map->m_lblk + map_len) eof_block = map->m_lblk + map_len; @@ -3739,7 +3739,7 @@ static int ext4_split_convert_extents(handle_t *handle, __func__, inode->i_ino, (unsigned long long)map->m_lblk, map->m_len); - eof_block = (inode->i_size + inode->i_sb->s_blocksize - 1) >> + eof_block = (i_size_read(inode) + inode->i_sb->s_blocksize - 1) >> inode->i_sb->s_blocksize_bits; if (eof_block < map->m_lblk + map->m_len) eof_block = map->m_lblk + map->m_len; -- 2.7.4