2003-03-21 14:59:04

by Gerd Knorr

[permalink] [raw]
Subject: [patch] 2.5 vm bugfix

Hi,

2.5.x kernels don't look at the VM_DONTEXPAND flag when merging
multiple vmas into one. Fix below.

Gerd

--- linux-2.5.65/mm/mmap.c 2003-03-21 13:03:28.377764776 +0100
+++ linux/mm/mmap.c 2003-03-21 13:09:52.981296152 +0100
@@ -379,6 +379,8 @@
can_vma_merge_before(struct vm_area_struct *vma, unsigned long vm_flags,
struct file *file, unsigned long vm_pgoff, unsigned long size)
{
+ if ((vma->vm_flags & VM_DONTEXPAND) || (vm_flags & VM_DONTEXPAND))
+ return 0;
if (vma->vm_file == file && vma->vm_flags == vm_flags) {
if (!file)
return 1; /* anon mapping */
@@ -396,6 +398,8 @@
can_vma_merge_after(struct vm_area_struct *vma, unsigned long vm_flags,
struct file *file, unsigned long vm_pgoff)
{
+ if ((vma->vm_flags & VM_DONTEXPAND) || (vm_flags & VM_DONTEXPAND))
+ return 0;
if (vma->vm_file == file && vma->vm_flags == vm_flags) {
unsigned long vma_size;


2003-03-21 22:19:23

by Andrew Morton

[permalink] [raw]
Subject: Re: [patch] 2.5 vm bugfix

Gerd Knorr <[email protected]> wrote:
>
> Hi,
>
> 2.5.x kernels don't look at the VM_DONTEXPAND flag when merging
> multiple vmas into one. Fix below.

There is but one user of VM_DONTEXPAND in the kernel, and that is you ;)

Can you describe exactly why this driver requires DONTEXPAND? ie: how does
the driver work, and why is it special?

If there is some alternative way of providing the same behaviour we could
remove VM_DONTEXPAND, which would be nice.

Thanks.