diff mbox series

[1/1] ext4: Fix bs < ps issue reported with dioread_nolock mount opt

Message ID af902b5db99e8b73980c795d84ad7bb417487e76.1602168865.git.riteshh@linux.ibm.com (mailing list archive)
State New, archived
Headers show
Series [1/1] ext4: Fix bs < ps issue reported with dioread_nolock mount opt | expand

Commit Message

Ritesh Harjani Oct. 8, 2020, 3:02 p.m. UTC
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@linux.ibm.com>
Signed-off-by: Ritesh Harjani <riteshh@linux.ibm.com>
---
 fs/ext4/extents.c | 2 +-
 fs/ext4/inode.c   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

Comments

Jan Kara Oct. 8, 2020, 4:04 p.m. UTC | #1
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@linux.ibm.com>
> Signed-off-by: Ritesh Harjani <riteshh@linux.ibm.com>

Ah, good spotting! The patch looks good. You can add:

Reviewed-by: Jan Kara <jack@suse.cz>

								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
>
Sedat Dilek Oct. 9, 2020, 6:46 a.m. UTC | #2
On Thu, Oct 8, 2020 at 5:56 PM Ritesh Harjani <riteshh@linux.ibm.com> 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")

Fixes: tag should be 12 digits (see [1]).
( Seen while walking through ext-dev Git commits. )

- Sedat -

[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/submitting-patches.rst#n183

> Reported-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
> Signed-off-by: Ritesh Harjani <riteshh@linux.ibm.com>
> ---
>  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
>
Ritesh Harjani Oct. 9, 2020, 7:18 a.m. UTC | #3
On 10/9/20 12:16 PM, Sedat Dilek wrote:
> On Thu, Oct 8, 2020 at 5:56 PM Ritesh Harjani <riteshh@linux.ibm.com> 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")
> 
> Fixes: tag should be 12 digits (see [1]).
> ( Seen while walking through ext-dev Git commits. )


Thanks Sedat, I guess it should be minimum 12 chars [1]

[1]: 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/submitting-patches.rst#n177

-ritesh
Sedat Dilek Oct. 9, 2020, 10:18 a.m. UTC | #4
On Fri, Oct 9, 2020 at 9:19 AM Ritesh Harjani <riteshh@linux.ibm.com> wrote:
>
>
>
> On 10/9/20 12:16 PM, Sedat Dilek wrote:
> > On Thu, Oct 8, 2020 at 5:56 PM Ritesh Harjani <riteshh@linux.ibm.com> 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")
> >
> > Fixes: tag should be 12 digits (see [1]).
> > ( Seen while walking through ext-dev Git commits. )
>
>
> Thanks Sedat, I guess it should be minimum 12 chars [1]
>
> [1]:
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/submitting-patches.rst#n177
>

OK.

In my ~/.gitconfig:

[core]
       abbrev = 12

# Check for 'Fixes:' tag used in the Linux-kernel development process
(Thanks Kalle Valo).
# Link: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/submitting-patches.rst
# Usage: $ git log --format=fixes | head -5
[pretty]
   fixes = Fixes: %h (\"%s\")

Hope this is useful for others.

- Sedat -
Sedat Dilek Oct. 9, 2020, 10:28 a.m. UTC | #5
On Fri, Oct 9, 2020 at 12:18 PM Sedat Dilek <sedat.dilek@gmail.com> wrote:
>
> On Fri, Oct 9, 2020 at 9:19 AM Ritesh Harjani <riteshh@linux.ibm.com> wrote:
> >
> >
> >
> > On 10/9/20 12:16 PM, Sedat Dilek wrote:
> > > On Thu, Oct 8, 2020 at 5:56 PM Ritesh Harjani <riteshh@linux.ibm.com> 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")
> > >
> > > Fixes: tag should be 12 digits (see [1]).
> > > ( Seen while walking through ext-dev Git commits. )
> >
> >
> > Thanks Sedat, I guess it should be minimum 12 chars [1]
> >
> > [1]:
> > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/submitting-patches.rst#n177
> >
>
> OK.
>
> In my ~/.gitconfig:
>
> [core]
>        abbrev = 12
>
> # Check for 'Fixes:' tag used in the Linux-kernel development process
> (Thanks Kalle Valo).
> # Link: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/submitting-patches.rst
> # Usage: $ git log --format=fixes | head -5
> [pretty]
>    fixes = Fixes: %h (\"%s\")
>
> Hope this is useful for others.
>

Changed to...

Link: https://www.kernel.org/doc/html/latest/process/submitting-patches.html

- Sedat -
Theodore Ts'o Oct. 9, 2020, 3:58 p.m. UTC | #6
On Fri, Oct 09, 2020 at 12:18:23PM +0200, Sedat Dilek wrote:
> > > Fixes: tag should be 12 digits (see [1]).
> > > ( Seen while walking through ext-dev Git commits. )
> >
> > Thanks Sedat, I guess it should be minimum 12 chars [1]

Right, the point is that the commit ID referenced should be at least
12 bytes to avoid ambiguity.  There's nothing really wrong with using
more than 12 bytes.  I sometimes use 16, myself.  It does look like
there is a (mostly harmless) inconsistency between lines 177 and 183
of submitting-patches.rst.

> In my ~/.gitconfig:
> 
> [core]
>        abbrev = 12
> 
> # Check for 'Fixes:' tag used in the Linux-kernel development process
> (Thanks Kalle Valo).2
> # Link: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/submitting-patches.rst
> # Usage: $ git log --format=fixes | head -5
> [pretty]
>    fixes = Fixes: %h (\"%s\")
> 
> Hope this is useful for others.

Personally, I find cutting and pasting the full SHA-1 hash and
description, and then cutting down the hash in emacs to be more
convenient, since I generaslly have the git commit from "git log" in
terminal window anyway.  But whatever works for each developer.  :-)

       	      	      	    	 	    - Ted
diff mbox series

Patch

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;