2009-09-02 03:18:42

by Akira Fujita

[permalink] [raw]
Subject: [PATCH 2/4]ext4: Remove unneeded BUG_ON() in ext4_move_extents()

ext4: Remove unneeded BUG_ON() in ext4_move_extents()

From: Akira Fujita <[email protected]>

ext4_move_extents() checks with BUG_ON() whether
the exchanged blocks count accords with request blocks count.
But, if the target range (orig_start + len) includes sparse block(s),
'moved_len' (exchanged blocks count) does not accord with
'len' (request blocks count),
since sparse block is not counted in 'moved_len'.
Therefore we hit BUG_ON(), though it succeeded.

Signed-off-by: Akira Fujita <[email protected]>
---
fs/ext4/move_extent.c | 3 ---
1 files changed, 0 insertions(+), 3 deletions(-)

diff --git a/fs/ext4/move_extent.c b/fs/ext4/move_extent.c
index 60ed567..643156a 100644
--- a/fs/ext4/move_extent.c
+++ b/fs/ext4/move_extent.c
@@ -1323,8 +1323,5 @@ out2:
if (ret)
return ret;

- /* All of the specified blocks must be exchanged in succeed */
- BUG_ON(*moved_len != len);


2009-09-02 05:45:55

by Peng Tao

[permalink] [raw]
Subject: Re: [PATCH 2/4]ext4: Remove unneeded BUG_ON() in ext4_move_extents()

2009/9/2 Akira Fujita <[email protected]>:
> ext4: Remove unneeded BUG_ON() in ext4_move_extents()
>
> From: Akira Fujita <[email protected]>
>
> ext4_move_extents() checks with BUG_ON() whether
> the exchanged blocks count accords with request blocks count.
> But, if the target range (orig_start + len) includes sparse block(s),
> 'moved_len' (exchanged blocks count) does not accord with
> 'len' (request blocks count),
> since sparse block is not counted in 'moved_len'.
> Therefore we hit BUG_ON(), though it succeeded.
I can confirm the bug in my test cases too.

>
> Signed-off-by: Akira Fujita <[email protected]>
> ---
>  fs/ext4/move_extent.c |    3 ---
>  1 files changed, 0 insertions(+), 3 deletions(-)
>
> diff --git a/fs/ext4/move_extent.c b/fs/ext4/move_extent.c
> index 60ed567..643156a 100644
> --- a/fs/ext4/move_extent.c
> +++ b/fs/ext4/move_extent.c
> @@ -1323,8 +1323,5 @@ out2:
>        if (ret)
>                return ret;
>
> -       /* All of the specified blocks must be exchanged in succeed */
> -       BUG_ON(*moved_len != len);
> -
>        return 0;
>  }
> --
> To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
> the body of a message to [email protected]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>



--
Cheers,
Peng Tao
State Key Laboratory of Networking and Switching Technology
Beijing Univ. of Posts and Telecoms.

2009-09-02 06:49:11

by Akira Fujita

[permalink] [raw]
Subject: Re: [PATCH 2/4]ext4: Remove unneeded BUG_ON() in ext4_move_extents()

Hi Peng,
Peng Tao wrote:
> 2009/9/2 Akira Fujita <[email protected]>:
>> ext4: Remove unneeded BUG_ON() in ext4_move_extents()
>>
>> From: Akira Fujita <[email protected]>
>>
>> ext4_move_extents() checks with BUG_ON() whether
>> the exchanged blocks count accords with request blocks count.
>> But, if the target range (orig_start + len) includes sparse block(s),
>> 'moved_len' (exchanged blocks count) does not accord with
>> 'len' (request blocks count),
>> since sparse block is not counted in 'moved_len'.
>> Therefore we hit BUG_ON(), though it succeeded.
> I can confirm the bug in my test cases too.

I am looking into the issues you reported before:
http://marc.info/?l=linux-ext4&m=124975192830024&w=2
http://marc.info/?l=linux-ext4&m=124992522305319&w=2

When I send patches to the list, please review and test them.

Regards,
Akira Fujita


2009-09-06 03:13:39

by Theodore Ts'o

[permalink] [raw]
Subject: Re: [PATCH 2/4]ext4: Remove unneeded BUG_ON() in ext4_move_extents()

On Wed, Sep 02, 2009 at 12:17:57PM +0900, Akira Fujita wrote:
> ext4: Remove unneeded BUG_ON() in ext4_move_extents()
>
> From: Akira Fujita <[email protected]>
>
> ext4_move_extents() checks with BUG_ON() whether
> the exchanged blocks count accords with request blocks count.
> But, if the target range (orig_start + len) includes sparse block(s),
> 'moved_len' (exchanged blocks count) does not accord with
> 'len' (request blocks count),
> since sparse block is not counted in 'moved_len'.
> Therefore we hit BUG_ON(), though it succeeded.

Added to the ext4 patch queue.

- Ted