On Thu 08-10-20 20:32:48, Ritesh Harjani wrote: > 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") > Reported-by: Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxx> > Signed-off-by: Ritesh Harjani <riteshh@xxxxxxxxxxxxx> Ah, good spotting! The patch looks good. You can add: Reviewed-by: Jan Kara <jack@xxxxxxx> Honza > --- > fs/ext4/extents.c | 2 +- > fs/ext4/inode.c | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c > index a0481582187a..32d610cc896d 100644 > --- a/fs/ext4/extents.c > +++ b/fs/ext4/extents.c > @@ -4769,7 +4769,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 bf596467c234..3021235deaa1 100644 > --- a/fs/ext4/inode.c > +++ b/fs/ext4/inode.c > @@ -2254,7 +2254,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; > -- > 2.26.2 > -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR