On Thu, Sep 04, 2025 at 01:22:51PM -0400, Liam R. Howlett wrote:
diff --git a/mm/mremap.c b/mm/mremap.c
index e618a706aff5..793fad58302c 100644
--- a/mm/mremap.c
+++ b/mm/mremap.c
@@ -1040,7 +1040,7 @@ static unsigned long prep_move_vma(struct vma_remap_struct *vrm)
* We'd prefer to avoid failure later on in do_munmap:
* which may split one vma into three before unmapping.
*/
- if (current->mm->map_count >= sysctl_max_map_count - 3)
+ if (exceeds_max_map_count(current->mm, 4))
return -ENOMEM;
In my version this would be:
if (map_count_capacity(current->mm) < 4)
return -ENOMEM;
Someone could write map_count_capacity(current->mm) <= 4 and reintroduce
what this is trying to solve. And with the way it is written in this
patch, someone could pass in the wrong number.
Right, but I think 'capacity' is pretty clear here, if the caller does something
silly then that's on them...
I'm not sure this is worth doing. There are places we allow the count
to go higher.
...But yeah, it's kinda borderline as to how useful this is.
I _do_ however like the 'put map count in one place statically' rather than
having a global, so a minimal version of this could be to just have a helper
function that gets the sysctl_max_map_count, e.g.:
if (current->mm->mmap_count >= max_map_count() - 3)