2022-10-27 03:27:54

by Guoqing Jiang

[permalink] [raw]
Subject: [PATCH] ext4: make ext4_mb_initialize_context return void

Change the return type to void since it always return 0, and no need
to do the checking in ext4_mb_new_blocks.

Signed-off-by: Guoqing Jiang <[email protected]>
---
fs/ext4/mballoc.c | 10 ++--------
1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
index 9dad93059945..5b2ae37a8b80 100644
--- a/fs/ext4/mballoc.c
+++ b/fs/ext4/mballoc.c
@@ -5204,7 +5204,7 @@ static void ext4_mb_group_or_file(struct ext4_allocation_context *ac)
mutex_lock(&ac->ac_lg->lg_mutex);
}

-static noinline_for_stack int
+static noinline_for_stack void
ext4_mb_initialize_context(struct ext4_allocation_context *ac,
struct ext4_allocation_request *ar)
{
@@ -5253,8 +5253,6 @@ ext4_mb_initialize_context(struct ext4_allocation_context *ac,
(unsigned) ar->lleft, (unsigned) ar->pleft,
(unsigned) ar->lright, (unsigned) ar->pright,
inode_is_open_for_write(ar->inode) ? "" : "non-");
- return 0;
-
}

static noinline_for_stack void
@@ -5591,11 +5589,7 @@ ext4_fsblk_t ext4_mb_new_blocks(handle_t *handle,
goto out;
}

- *errp = ext4_mb_initialize_context(ac, ar);
- if (*errp) {
- ar->len = 0;
- goto out;
- }
+ ext4_mb_initialize_context(ac, ar);

ac->ac_op = EXT4_MB_HISTORY_PREALLOC;
seq = this_cpu_read(discard_pa_seq);
--
2.31.1



2022-10-27 06:31:56

by Jason Yan

[permalink] [raw]
Subject: Re: [PATCH] ext4: make ext4_mb_initialize_context return void


On 2022/10/27 11:24, Guoqing Jiang wrote:
> Change the return type to void since it always return 0, and no need
> to do the checking in ext4_mb_new_blocks.
>
> Signed-off-by: Guoqing Jiang <[email protected]>
> ---
> fs/ext4/mballoc.c | 10 ++--------
> 1 file changed, 2 insertions(+), 8 deletions(-)
>
> diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
> index 9dad93059945..5b2ae37a8b80 100644
> --- a/fs/ext4/mballoc.c
> +++ b/fs/ext4/mballoc.c
> @@ -5204,7 +5204,7 @@ static void ext4_mb_group_or_file(struct ext4_allocation_context *ac)
> mutex_lock(&ac->ac_lg->lg_mutex);
> }
>
> -static noinline_for_stack int
> +static noinline_for_stack void
> ext4_mb_initialize_context(struct ext4_allocation_context *ac,
> struct ext4_allocation_request *ar)
> {
> @@ -5253,8 +5253,6 @@ ext4_mb_initialize_context(struct ext4_allocation_context *ac,
> (unsigned) ar->lleft, (unsigned) ar->pleft,
> (unsigned) ar->lright, (unsigned) ar->pright,
> inode_is_open_for_write(ar->inode) ? "" : "non-");
> - return 0;
> -
> }
>
> static noinline_for_stack void
> @@ -5591,11 +5589,7 @@ ext4_fsblk_t ext4_mb_new_blocks(handle_t *handle,
> goto out;
> }
>
> - *errp = ext4_mb_initialize_context(ac, ar);
> - if (*errp) {
> - ar->len = 0;
> - goto out;
> - }
> + ext4_mb_initialize_context(ac, ar);

This changed the logic here slightly. *errp will not be intialized with
zero after this change. So we need to carefully check whether this will
cause any issues.

Thanks,
Jason

>
> ac->ac_op = EXT4_MB_HISTORY_PREALLOC;
> seq = this_cpu_read(discard_pa_seq);
>

2022-10-27 08:19:52

by Guoqing Jiang

[permalink] [raw]
Subject: Re: [PATCH] ext4: make ext4_mb_initialize_context return void



On 10/27/22 2:29 PM, Jason Yan wrote:
>
> On 2022/10/27 11:24, Guoqing Jiang wrote:
>> Change the return type to void since it always return 0, and no need
>> to do the checking in ext4_mb_new_blocks.
>>
>> Signed-off-by: Guoqing Jiang <[email protected]>
>> ---
>>   fs/ext4/mballoc.c | 10 ++--------
>>   1 file changed, 2 insertions(+), 8 deletions(-)
>>
>> diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
>> index 9dad93059945..5b2ae37a8b80 100644
>> --- a/fs/ext4/mballoc.c
>> +++ b/fs/ext4/mballoc.c
>> @@ -5204,7 +5204,7 @@ static void ext4_mb_group_or_file(struct
>> ext4_allocation_context *ac)
>>       mutex_lock(&ac->ac_lg->lg_mutex);
>>   }
>>   -static noinline_for_stack int
>> +static noinline_for_stack void
>>   ext4_mb_initialize_context(struct ext4_allocation_context *ac,
>>                   struct ext4_allocation_request *ar)
>>   {
>> @@ -5253,8 +5253,6 @@ ext4_mb_initialize_context(struct
>> ext4_allocation_context *ac,
>>               (unsigned) ar->lleft, (unsigned) ar->pleft,
>>               (unsigned) ar->lright, (unsigned) ar->pright,
>>               inode_is_open_for_write(ar->inode) ? "" : "non-");
>> -    return 0;
>> -
>>   }
>>     static noinline_for_stack void
>> @@ -5591,11 +5589,7 @@ ext4_fsblk_t ext4_mb_new_blocks(handle_t *handle,
>>           goto out;
>>       }
>>   -    *errp = ext4_mb_initialize_context(ac, ar);
>> -    if (*errp) {
>> -        ar->len = 0;
>> -        goto out;
>> -    }
>> +    ext4_mb_initialize_context(ac, ar);
>
> This changed the logic here slightly. *errp will not be intialized
> with zero after this change. So we need to carefully check whether
> this will cause any issues.

Yes, thanks for reminder. I think "*errp" is always set later with below.

https://elixir.bootlin.com/linux/v6.1-rc2/source/fs/ext4/mballoc.c#L5606
https://elixir.bootlin.com/linux/v6.1-rc2/source/fs/ext4/mballoc.c#L5611
https://elixir.bootlin.com/linux/v6.1-rc2/source/fs/ext4/mballoc.c#L5629
https://elixir.bootlin.com/linux/v6.1-rc2/source/fs/ext4/mballoc.c#L5646

Is there any place where don't set it accordfingly? If so,  the below
should be kept.

*errp = ext4_mb_initialize_context(ac, ar);

Thanks,
Guoqing

2022-10-28 11:13:58

by Ojaswin Mujoo

[permalink] [raw]
Subject: Re: [PATCH] ext4: make ext4_mb_initialize_context return void

On Thu, Oct 27, 2022 at 04:12:45PM +0800, Guoqing Jiang wrote:
>
>
> On 10/27/22 2:29 PM, Jason Yan wrote:
> >
> > On 2022/10/27 11:24, Guoqing Jiang wrote:
> > > Change the return type to void since it always return 0, and no need
> > > to do the checking in ext4_mb_new_blocks.
> > >
> > > Signed-off-by: Guoqing Jiang <[email protected]>
> > > ---
> > > ? fs/ext4/mballoc.c | 10 ++--------
> > > ? 1 file changed, 2 insertions(+), 8 deletions(-)
> > >
> > > diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
> > > index 9dad93059945..5b2ae37a8b80 100644
> > > --- a/fs/ext4/mballoc.c
> > > +++ b/fs/ext4/mballoc.c
> > > @@ -5204,7 +5204,7 @@ static void ext4_mb_group_or_file(struct
> > > ext4_allocation_context *ac)
> > > ????? mutex_lock(&ac->ac_lg->lg_mutex);
> > > ? }
> > > ? -static noinline_for_stack int
> > > +static noinline_for_stack void
> > > ? ext4_mb_initialize_context(struct ext4_allocation_context *ac,
> > > ????????????????? struct ext4_allocation_request *ar)
> > > ? {
> > > @@ -5253,8 +5253,6 @@ ext4_mb_initialize_context(struct
> > > ext4_allocation_context *ac,
> > > ????????????? (unsigned) ar->lleft, (unsigned) ar->pleft,
> > > ????????????? (unsigned) ar->lright, (unsigned) ar->pright,
> > > ????????????? inode_is_open_for_write(ar->inode) ? "" : "non-");
> > > -??? return 0;
> > > -
> > > ? }
> > > ? ? static noinline_for_stack void
> > > @@ -5591,11 +5589,7 @@ ext4_fsblk_t ext4_mb_new_blocks(handle_t *handle,
> > > ????????? goto out;
> > > ????? }
> > > ? -??? *errp = ext4_mb_initialize_context(ac, ar);
> > > -??? if (*errp) {
> > > -??????? ar->len = 0;
> > > -??????? goto out;
> > > -??? }
> > > +??? ext4_mb_initialize_context(ac, ar);
> >
> > This changed the logic here slightly. *errp will not be intialized with
> > zero after this change. So we need to carefully check whether this will
> > cause any issues.
>
> Yes, thanks for reminder. I think "*errp" is always set later with below.
>
> https://elixir.bootlin.com/linux/v6.1-rc2/source/fs/ext4/mballoc.c#L5606
> https://elixir.bootlin.com/linux/v6.1-rc2/source/fs/ext4/mballoc.c#L5611
> https://elixir.bootlin.com/linux/v6.1-rc2/source/fs/ext4/mballoc.c#L5629
> https://elixir.bootlin.com/linux/v6.1-rc2/source/fs/ext4/mballoc.c#L5646
Hi Guoqing,

I agree, it seems to be intialized correctly later in the code. The
flow is something like:

ext4_fsblk_t ext4_mb_new_blocks(...)
{
...
ext4_mb_initialize_context(ac, ar);
...
if (!ext4_mb_use_preallocated(ac)) {
*errp = ext4_mb_pa_alloc(ac); // *errp init to 0 on success
...
}

if (likely(ac->ac_status == AC_STATUS_FOUND)) {
// *errp init to 0 on success
*errp = ext4_mb_mark_diskspace_used(ac, handle, reserv_clstrs);
...
} else {
...
*errp = -ENOSPC;
}
...
}

So it seems like this cleanup won't alter the behavior. Feel free to
add:

Reviewed-by: Ojaswin Mujoo <[email protected]>

Regards,
ojaswin

2022-10-29 03:08:43

by Guoqing Jiang

[permalink] [raw]
Subject: Re: [PATCH] ext4: make ext4_mb_initialize_context return void

Hi Ojaswin,

On 10/28/22 6:54 PM, Ojaswin Mujoo wrote:
> On Thu, Oct 27, 2022 at 04:12:45PM +0800, Guoqing Jiang wrote:
>>
>> On 10/27/22 2:29 PM, Jason Yan wrote:
>>> On 2022/10/27 11:24, Guoqing Jiang wrote:
>>>> Change the return type to void since it always return 0, and no need
>>>> to do the checking in ext4_mb_new_blocks.
>>>>
>>>> Signed-off-by: Guoqing Jiang <[email protected]>
>>>> ---
>>>>   fs/ext4/mballoc.c | 10 ++--------
>>>>   1 file changed, 2 insertions(+), 8 deletions(-)
>>>>
>>>> diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
>>>> index 9dad93059945..5b2ae37a8b80 100644
>>>> --- a/fs/ext4/mballoc.c
>>>> +++ b/fs/ext4/mballoc.c
>>>> @@ -5204,7 +5204,7 @@ static void ext4_mb_group_or_file(struct
>>>> ext4_allocation_context *ac)
>>>>       mutex_lock(&ac->ac_lg->lg_mutex);
>>>>   }
>>>>   -static noinline_for_stack int
>>>> +static noinline_for_stack void
>>>>   ext4_mb_initialize_context(struct ext4_allocation_context *ac,
>>>>                   struct ext4_allocation_request *ar)
>>>>   {
>>>> @@ -5253,8 +5253,6 @@ ext4_mb_initialize_context(struct
>>>> ext4_allocation_context *ac,
>>>>               (unsigned) ar->lleft, (unsigned) ar->pleft,
>>>>               (unsigned) ar->lright, (unsigned) ar->pright,
>>>>               inode_is_open_for_write(ar->inode) ? "" : "non-");
>>>> -    return 0;
>>>> -
>>>>   }
>>>>     static noinline_for_stack void
>>>> @@ -5591,11 +5589,7 @@ ext4_fsblk_t ext4_mb_new_blocks(handle_t *handle,
>>>>           goto out;
>>>>       }
>>>>   -    *errp = ext4_mb_initialize_context(ac, ar);
>>>> -    if (*errp) {
>>>> -        ar->len = 0;
>>>> -        goto out;
>>>> -    }
>>>> +    ext4_mb_initialize_context(ac, ar);
>>> This changed the logic here slightly. *errp will not be intialized with
>>> zero after this change. So we need to carefully check whether this will
>>> cause any issues.
>> Yes, thanks for reminder. I think "*errp" is always set later with below.
>>
>> https://elixir.bootlin.com/linux/v6.1-rc2/source/fs/ext4/mballoc.c#L5606
>> https://elixir.bootlin.com/linux/v6.1-rc2/source/fs/ext4/mballoc.c#L5611
>> https://elixir.bootlin.com/linux/v6.1-rc2/source/fs/ext4/mballoc.c#L5629
>> https://elixir.bootlin.com/linux/v6.1-rc2/source/fs/ext4/mballoc.c#L5646
> Hi Guoqing,
>
> I agree, it seems to be intialized correctly later in the code. The
> flow is something like:
>
> ext4_fsblk_t ext4_mb_new_blocks(...)
> {
> ...
> ext4_mb_initialize_context(ac, ar);
> ...
> if (!ext4_mb_use_preallocated(ac)) {
> *errp = ext4_mb_pa_alloc(ac); // *errp init to 0 on success
> ...
> }
>
> if (likely(ac->ac_status == AC_STATUS_FOUND)) {
> // *errp init to 0 on success
> *errp = ext4_mb_mark_diskspace_used(ac, handle, reserv_clstrs);
> ...
> } else {
> ...
> *errp = -ENOSPC;
> }
> ...
> }

Yes, thanks for the above.

> So it seems like this cleanup won't alter the behavior. Feel free to,
> add:
>
> Reviewed-by: Ojaswin Mujoo <[email protected]>

Appreciate for your review!

Thanks,
Guoqing