# Re: \[PATCH v4 2/3\] mm/mempolicy: add set\_mempolicy\_home\_node syscall

- From: Jonathan Corbet \<corbet@lwn.net\>
- Date: 2021-11-10 15:18:19 
- List: linux-api
- Page: https://ratatoskr.run/linux-api/2021/11/6512336
- Thread: https://ratatoskr.run/linux-mm/2021/11/6511882/t.md

```text
"Aneesh Kumar K.V" [ref] writes:

> This syscall can be used to set a home node for the MPOL_BIND
> and MPOL_PREFERRED_MANY memory policy. Users should use this
> syscall after setting up a memory policy for the specified range
> as shown below.

So I noticed one little thing as I was looking at this...

[...]

> +SYSCALL_DEFINE4(set_mempolicy_home_node, unsigned long, start, unsigned long, len,
> +		unsigned long, home_node, unsigned long, flags)
> +{
> +	struct mm_struct *mm = current->mm;
> +	struct vm_area_struct *vma;
> +	struct mempolicy *new;
> +	unsigned long vmstart;
> +	unsigned long vmend;
> +	unsigned long end;
> +	int err = -ENOENT;
> +
> +	if (start & ~PAGE_MASK)
> +		return -EINVAL;
> +
> +	len = (len + PAGE_SIZE - 1) & PAGE_MASK;
> +	end = start + len;
> +
> +	if (end < start)
> +		return -EINVAL;
> +	if (end == start)
> +		return 0;
> +	mmap_write_lock(mm);
> +	vma = find_vma(mm, start);
> +	for (; vma && vma->vm_start < end;  vma = vma->vm_next) {
> +
> +		vmstart = max(start, vma->vm_start);
> +		vmend   = min(end, vma->vm_end);
> +		new = mpol_dup(vma_policy(vma));
> +		if (IS_ERR(new)) {
> +			err = PTR_ERR(new);
> +			break;
> +		}
> +		/*
> +		 * Only update home node if there is an existing vma policy
> +		 */
> +		if (!new)
> +			continue;
> +		new->home_node = home_node;
> +		err = mbind_range(mm, vmstart, vmend, new);
> +		if (err)
> +			break;
> +	}
> +	mmap_write_unlock(mm);
> +	return err;
> +}

You never do anything with flags; I believe you want to check and ensure
that it's zero if there are no defined flags at this point?

Thanks,

jon
```
