From: Ritesh Harjani Date: Thu, 8 Oct 2020 15:02:48 +0000 (+0530) Subject: ext4: fix bs < ps issue reported with dioread_nolock mount opt X-Git-Tag: v5.9.5~46 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=7bb9a23986895a373b7e1fcbfeeb9a1c954c4da3;p=users%2Fdwmw2%2Flinux.git ext4: fix bs < ps issue reported with dioread_nolock mount opt commit d1e18b8824dd50cff255e6cecf515ea598eaf9f0 upstream. left shifting m_lblk by blkbits was causing value overflow and hence it was not able to convert unwritten to written extent. So, make sure we typecast it to loff_t before do left shift operation. Also in func ext4_convert_unwritten_io_end_vec(), make sure to initialize ret variable to avoid accidentally returning an uninitialized ret. This patch fixes the issue reported in ext4 for bs < ps with dioread_nolock mount option. Fixes: c8cc88163f40df39e50c ("ext4: Add support for blocksize < pagesize in dioread_nolock") Cc: stable@kernel.org Reported-by: Aneesh Kumar K.V Signed-off-by: Ritesh Harjani Reviewed-by: Jan Kara Link: https://lore.kernel.org/r/af902b5db99e8b73980c795d84ad7bb417487e76.1602168865.git.riteshh@linux.ibm.com Signed-off-by: Theodore Ts'o Signed-off-by: Greg Kroah-Hartman --- diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index 0a5205edc00a8..3998c11f95171 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c @@ -4770,7 +4770,7 @@ int ext4_convert_unwritten_extents(handle_t *handle, struct inode *inode, int ext4_convert_unwritten_io_end_vec(handle_t *handle, ext4_io_end_t *io_end) { - int ret, err = 0; + int ret = 0, err = 0; struct ext4_io_end_vec *io_end_vec; /* diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 288704e9064b3..16a8c29256cd9 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -2257,7 +2257,7 @@ static int mpage_process_page(struct mpage_da_data *mpd, struct page *page, err = PTR_ERR(io_end_vec); goto out; } - io_end_vec->offset = mpd->map.m_lblk << blkbits; + io_end_vec->offset = (loff_t)mpd->map.m_lblk << blkbits; } *map_bh = true; goto out;