diff mbox series

Btrfs: remove redundant btrfs_trans_release_metadata"

Message ID 1536110090-100798-1-git-send-email-bo.liu@linux.alibaba.com (mailing list archive)
State New, archived
Headers show
Series Btrfs: remove redundant btrfs_trans_release_metadata" | expand

Commit Message

Liu Bo Sept. 5, 2018, 1:14 a.m. UTC
__btrfs_end_transaction() has done the metadata release twice,
probably because it used to process delayed refs in between, but now
that we don't process delayed refs any more, the 2nd release is always
a noop.

Signed-off-by: Liu Bo <bo.liu@linux.alibaba.com>
---
 fs/btrfs/transaction.c | 6 ------
 1 file changed, 6 deletions(-)

Comments

Nikolay Borisov Sept. 5, 2018, 5:58 a.m. UTC | #1
On  5.09.2018 04:14, Liu Bo wrote:
> __btrfs_end_transaction() has done the metadata release twice,
> probably because it used to process delayed refs in between, but now
> that we don't process delayed refs any more, the 2nd release is always
> a noop.
> 
> Signed-off-by: Liu Bo <bo.liu@linux.alibaba.com>

Reviewed-by: Nikolay Borisov <nborisov@suse.com>

> ---
>  fs/btrfs/transaction.c | 6 ------
>  1 file changed, 6 deletions(-)
> 
> diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c
> index bb1b9f526e98..94b036a74d11 100644
> --- a/fs/btrfs/transaction.c
> +++ b/fs/btrfs/transaction.c
> @@ -826,12 +826,6 @@ static int __btrfs_end_transaction(struct btrfs_trans_handle *trans,
>  		return 0;
>  	}
>  
> -	btrfs_trans_release_metadata(trans);
> -	trans->block_rsv = NULL;
> -
> -	if (!list_empty(&trans->new_bgs))
> -		btrfs_create_pending_block_groups(trans);
> -

The only code which can have any implications to the transaction reserve
is the btrfs_Create_pending_block_groups since it does insert items. But
at this point trans->block_rsv is already null and additionally even if
more reservations are made for this transaction further down either
btrfs_commit_transaction is called or the transaction kthread is called
which is going to commit it. So this change really seems inconsequential.

>  	trans->delayed_ref_updates = 0;
>  	if (!trans->sync) {
>  		must_run_delayed_refs =
>
Liu Bo Sept. 6, 2018, 5:45 a.m. UTC | #2
Somehow this ends up with crash in btrfs/124, I'm trying to figure out
what went wrong.

thanks,
liubo


On Tue, Sep 4, 2018 at 6:14 PM, Liu Bo <bo.liu@linux.alibaba.com> wrote:
> __btrfs_end_transaction() has done the metadata release twice,
> probably because it used to process delayed refs in between, but now
> that we don't process delayed refs any more, the 2nd release is always
> a noop.
>
> Signed-off-by: Liu Bo <bo.liu@linux.alibaba.com>
> ---
>  fs/btrfs/transaction.c | 6 ------
>  1 file changed, 6 deletions(-)
>
> diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c
> index bb1b9f526e98..94b036a74d11 100644
> --- a/fs/btrfs/transaction.c
> +++ b/fs/btrfs/transaction.c
> @@ -826,12 +826,6 @@ static int __btrfs_end_transaction(struct btrfs_trans_handle *trans,
>                 return 0;
>         }
>
> -       btrfs_trans_release_metadata(trans);
> -       trans->block_rsv = NULL;
> -
> -       if (!list_empty(&trans->new_bgs))
> -               btrfs_create_pending_block_groups(trans);
> -
>         trans->delayed_ref_updates = 0;
>         if (!trans->sync) {
>                 must_run_delayed_refs =
> --
> 1.8.3.1
>
Liu Bo Sept. 6, 2018, 6:47 a.m. UTC | #3
On Wed, Sep 5, 2018 at 10:45 PM, Liu Bo <obuil.liubo@gmail.com> wrote:
> Somehow this ends up with crash in btrfs/124, I'm trying to figure out
> what went wrong.
>

It revealed the problem addressed in Josef's patch[1], so with it,
this patch works just fine.

[1] btrfs: make sure we create all new bgs

thanks,
liubo

>
> On Tue, Sep 4, 2018 at 6:14 PM, Liu Bo <bo.liu@linux.alibaba.com> wrote:
>> __btrfs_end_transaction() has done the metadata release twice,
>> probably because it used to process delayed refs in between, but now
>> that we don't process delayed refs any more, the 2nd release is always
>> a noop.
>>
>> Signed-off-by: Liu Bo <bo.liu@linux.alibaba.com>
>> ---
>>  fs/btrfs/transaction.c | 6 ------
>>  1 file changed, 6 deletions(-)
>>
>> diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c
>> index bb1b9f526e98..94b036a74d11 100644
>> --- a/fs/btrfs/transaction.c
>> +++ b/fs/btrfs/transaction.c
>> @@ -826,12 +826,6 @@ static int __btrfs_end_transaction(struct btrfs_trans_handle *trans,
>>                 return 0;
>>         }
>>
>> -       btrfs_trans_release_metadata(trans);
>> -       trans->block_rsv = NULL;
>> -
>> -       if (!list_empty(&trans->new_bgs))
>> -               btrfs_create_pending_block_groups(trans);
>> -
>>         trans->delayed_ref_updates = 0;
>>         if (!trans->sync) {
>>                 must_run_delayed_refs =
>> --
>> 1.8.3.1
>>
Nikolay Borisov Sept. 6, 2018, 6:50 p.m. UTC | #4
On  6.09.2018 09:47, Liu Bo wrote:
> On Wed, Sep 5, 2018 at 10:45 PM, Liu Bo <obuil.liubo@gmail.com> wrote:
>> Somehow this ends up with crash in btrfs/124, I'm trying to figure out
>> what went wrong.
>>
> 
> It revealed the problem addressed in Josef's patch[1], so with it,
> this patch works just fine.

What exactly was the crash ?

> 
> [1] btrfs: make sure we create all new bgs
> 
> thanks,
> liubo
> 
>>
>> On Tue, Sep 4, 2018 at 6:14 PM, Liu Bo <bo.liu@linux.alibaba.com> wrote:
>>> __btrfs_end_transaction() has done the metadata release twice,
>>> probably because it used to process delayed refs in between, but now
>>> that we don't process delayed refs any more, the 2nd release is always
>>> a noop.
>>>
>>> Signed-off-by: Liu Bo <bo.liu@linux.alibaba.com>
>>> ---
>>>  fs/btrfs/transaction.c | 6 ------
>>>  1 file changed, 6 deletions(-)
>>>
>>> diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c
>>> index bb1b9f526e98..94b036a74d11 100644
>>> --- a/fs/btrfs/transaction.c
>>> +++ b/fs/btrfs/transaction.c
>>> @@ -826,12 +826,6 @@ static int __btrfs_end_transaction(struct btrfs_trans_handle *trans,
>>>                 return 0;
>>>         }
>>>
>>> -       btrfs_trans_release_metadata(trans);
>>> -       trans->block_rsv = NULL;
>>> -
>>> -       if (!list_empty(&trans->new_bgs))
>>> -               btrfs_create_pending_block_groups(trans);
>>> -
>>>         trans->delayed_ref_updates = 0;
>>>         if (!trans->sync) {
>>>                 must_run_delayed_refs =
>>> --
>>> 1.8.3.1
>>>
>
Liu Bo Sept. 6, 2018, 8:25 p.m. UTC | #5
On Thu, Sep 6, 2018 at 11:50 AM, Nikolay Borisov <nborisov@suse.com> wrote:
>
>
> On  6.09.2018 09:47, Liu Bo wrote:
>> On Wed, Sep 5, 2018 at 10:45 PM, Liu Bo <obuil.liubo@gmail.com> wrote:
>>> Somehow this ends up with crash in btrfs/124, I'm trying to figure out
>>> what went wrong.
>>>
>>
>> It revealed the problem addressed in Josef's patch[1], so with it,
>> this patch works just fine.
>
> What exactly was the crash ?
>

assertion failed: list_empty(&block_group->bg_list), file:
fs/btrfs/extent-tree.c,

kernel BUG at fs/btrfs/ctree.h:3427!
...
close_ctree+0x142/0x310 [btrfs]

thanks,
liubo



>>
>> [1] btrfs: make sure we create all new bgs
>>
>> thanks,
>> liubo
>>
>>>
>>> On Tue, Sep 4, 2018 at 6:14 PM, Liu Bo <bo.liu@linux.alibaba.com> wrote:
>>>> __btrfs_end_transaction() has done the metadata release twice,
>>>> probably because it used to process delayed refs in between, but now
>>>> that we don't process delayed refs any more, the 2nd release is always
>>>> a noop.
>>>>
>>>> Signed-off-by: Liu Bo <bo.liu@linux.alibaba.com>
>>>> ---
>>>>  fs/btrfs/transaction.c | 6 ------
>>>>  1 file changed, 6 deletions(-)
>>>>
>>>> diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c
>>>> index bb1b9f526e98..94b036a74d11 100644
>>>> --- a/fs/btrfs/transaction.c
>>>> +++ b/fs/btrfs/transaction.c
>>>> @@ -826,12 +826,6 @@ static int __btrfs_end_transaction(struct btrfs_trans_handle *trans,
>>>>                 return 0;
>>>>         }
>>>>
>>>> -       btrfs_trans_release_metadata(trans);
>>>> -       trans->block_rsv = NULL;
>>>> -
>>>> -       if (!list_empty(&trans->new_bgs))
>>>> -               btrfs_create_pending_block_groups(trans);
>>>> -
>>>>         trans->delayed_ref_updates = 0;
>>>>         if (!trans->sync) {
>>>>                 must_run_delayed_refs =
>>>> --
>>>> 1.8.3.1
>>>>
>>
diff mbox series

Patch

diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c
index bb1b9f526e98..94b036a74d11 100644
--- a/fs/btrfs/transaction.c
+++ b/fs/btrfs/transaction.c
@@ -826,12 +826,6 @@  static int __btrfs_end_transaction(struct btrfs_trans_handle *trans,
 		return 0;
 	}
 
-	btrfs_trans_release_metadata(trans);
-	trans->block_rsv = NULL;
-
-	if (!list_empty(&trans->new_bgs))
-		btrfs_create_pending_block_groups(trans);
-
 	trans->delayed_ref_updates = 0;
 	if (!trans->sync) {
 		must_run_delayed_refs =