Re: [PATCH v2 16/33] mm/vma: minor cleanup of expand_[upwards, downwards]()

"Vlastimil Babka (SUSE)" <[email protected]> Wed, 15 Jul 2026 16:53:57 +0200
Newsgroups org.kernel.vger.linux-sgx,dev.linux.lists.damon,dev.linux.lists.iommu,dev.linux.lists.nvdimm,org.freedesktop.lists.dri-devel,org.kernel.vger.kvm,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-parisc,org.kernel.vger.linux-perf-users,org.kernel.vger.linux-tegra,org.kernel.vger.linux-trace-kernel,org.kvack.linux-mm
Message-ID <[email protected]>
On 7/10/26 22:16, Lorenzo Stoakes wrote:
> Adjust the stack expansion functions expand_upwards() and
> expand_downwards() such that they are expressed in terms of named constant
> values, and make use of vma_start_pgoff().
> 
> This clearly documents that we are referencing the page offset of the start
> of the VMA.
> 
> Additionally this cleans up the overflow check in expand_upwards().
> 
> No functional change intended.
> 
> Reviewed-by: Pedro Falcato <[email protected]>
> Reviewed-by: Gregory Price <[email protected]>
> Signed-off-by: Lorenzo Stoakes <[email protected]>

Reviewed-by: Vlastimil Babka (SUSE) <[email protected]>

> ---
>  mm/vma.c | 17 +++++++----------
>  1 file changed, 7 insertions(+), 10 deletions(-)
> 
> diff --git a/mm/vma.c b/mm/vma.c
> index 7265a054cfa3..5d5e60ea8a25 100644
> --- a/mm/vma.c
> +++ b/mm/vma.c
> @@ -3216,13 +3216,12 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address)
>  
>  	/* Somebody else might have raced and expanded it already */
>  	if (address > vma->vm_end) {
> -		unsigned long size, grow;
> -
> -		size = address - vma->vm_start;
> -		grow = (address - vma->vm_end) >> PAGE_SHIFT;
> +		const unsigned long size = address - vma->vm_start;
> +		const unsigned long grow = (address - vma->vm_end) >> PAGE_SHIFT;
> +		const pgoff_t pgoff = vma_start_pgoff(vma);
>  
>  		error = -ENOMEM;
> -		if (vma->vm_pgoff + (size >> PAGE_SHIFT) >= vma->vm_pgoff) {
> +		if (pgoff + (size >> PAGE_SHIFT) >= pgoff) {
>  			error = acct_stack_growth(vma, size, grow);
>  			if (!error) {
>  				if (vma_test(vma, VMA_LOCKED_BIT))
> @@ -3295,13 +3294,11 @@ int expand_downwards(struct vm_area_struct *vma, unsigned long address)
>  
>  	/* Somebody else might have raced and expanded it already */
>  	if (address < vma->vm_start) {
> -		unsigned long size, grow;
> -
> -		size = vma->vm_end - address;
> -		grow = (vma->vm_start - address) >> PAGE_SHIFT;
> +		const unsigned long size = vma->vm_end - address;
> +		const unsigned long grow = (vma->vm_start - address) >> PAGE_SHIFT;
>  
>  		error = -ENOMEM;
> -		if (grow <= vma->vm_pgoff) {
> +		if (grow <= vma_start_pgoff(vma)) {
>  			error = acct_stack_growth(vma, size, grow);
>  			if (!error) {
>  				if (vma_test(vma, VMA_LOCKED_BIT))
>