Re: [PATCH v3 1/3] mm/vma: cleanup error handling path in vma_expand()

From: Lorenzo Stoakes

Date: Mon Mar 02 2026 - 09:06:42 EST


On Wed, Feb 25, 2026 at 11:06:07PM -0800, Suren Baghdasaryan wrote:
> vma_expand() error handling is a bit confusing with "if (ret) return ret;"
> mixed with "if (!ret && ...) ret = ...;". Simplify the code to check
> for errors and return immediately after an operation that might fail.
> This also makes later changes to this function more readable.
>
> No functional change intended.
>
> Suggested-by: Jann Horn <jannh@xxxxxxxxxx>
> Signed-off-by: Suren Baghdasaryan <surenb@xxxxxxxxxx>

LGTM, so:

Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>

> ---
> mm/vma.c | 12 ++++++++----
> 1 file changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/mm/vma.c b/mm/vma.c
> index be64f781a3aa..bb4d0326fecb 100644
> --- a/mm/vma.c
> +++ b/mm/vma.c
> @@ -1186,12 +1186,16 @@ int vma_expand(struct vma_merge_struct *vmg)
> * Note that, by convention, callers ignore OOM for this case, so
> * we don't need to account for vmg->give_up_on_mm here.
> */
> - if (remove_next)
> + if (remove_next) {
> ret = dup_anon_vma(target, next, &anon_dup);
> - if (!ret && vmg->copied_from)
> + if (ret)
> + return ret;
> + }

> + if (vmg->copied_from) {
> ret = dup_anon_vma(target, vmg->copied_from, &anon_dup);
> - if (ret)
> - return ret;
> + if (ret)
> + return ret;
> + }

Thanks that is an improvement!

I was going to suggest declaring 'ret' in each block but that kinda adds noise
so this is fine.

Maybe rename 'ret' to 'err' but not a big deal, this function could do with a
little more cleanup too I think!

>
> if (remove_next) {
> vma_start_write(next);
> --
> 2.53.0.414.gf7e9f6c205-goog
>