projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
d56e03c
)
[PATCH] NOMMU: make SYSV SHM nattch work correctly
author
David Howells
<dhowells@redhat.com>
Thu, 22 Mar 2007 08:11:24 +0000
(
00:11
-0800)
committer
Linus Torvalds
<torvalds@woody.linux-foundation.org>
Fri, 23 Mar 2007 02:39:06 +0000
(19:39 -0700)
Make the SYSV SHM nattch counter work correctly by forcing multiple VMAs to
be produced to represent MAP_SHARED segments, even if they overlap exactly.
Using this test program:
http://people.redhat.com/~dhowells/doshm.c
Run as:
doshm sysv
I can see nattch going from one before the patch:
# /doshm sysv
Command: sysv
shmid: 65536
memory: 0xc3700000
c0b00000
-
c0b04000
rw-p
00000000
00:00 0
c0bb0000
-
c0bba788
r-xs
00000000
00:0b
14582157
/lib/ld-uClibc-0.9.28.so
c3180000
-
c31dede4
r-xs
00000000
00:0b
14582179
/lib/libuClibc-0.9.28.so
c3520000
-
c352278c
rw-p
00000000
00:0b
13763417
/doshm
c3584000
-
c35865e8
r-xs
00000000
00:0b
13763417
/doshm
c3588000
-
c358aa00
rw-p
00008000
00:0b
14582157
/lib/ld-uClibc-0.9.28.so
c3590000
-
c359b6c0
rw-p
00000000
00:00 0
c3620000
-
c3640000
rwxp
00000000
00:00 0
c3700000
-
c37fa000
rw-S
00000000
00:06 1411 /SYSV00000000 (deleted)
c3700000
-
c37fa000
rw-S
00000000
00:06 1411 /SYSV00000000 (deleted)
nattch 1
To two after the patch:
# /doshm sysv
Command: sysv
shmid: 0
memory: 0xc3700000
c0bb0000
-
c0bba788
r-xs
00000000
00:0b
14582157
/lib/ld-uClibc-0.9.28.so
c3180000
-
c31dede4
r-xs
00000000
00:0b
14582179
/lib/libuClibc-0.9.28.so
c3320000
-
c3340000
rwxp
00000000
00:00 0
c3530000
-
c35325e8
r-xs
00000000
00:0b
13763417
/doshm
c3534000
-
c353678c
rw-p
00000000
00:0b
13763417
/doshm
c3538000
-
c353aa00
rw-p
00008000
00:0b
14582157
/lib/ld-uClibc-0.9.28.so
c3590000
-
c359b6c0
rw-p
00000000
00:00 0
c35a4000
-
c35a8000
rw-p
00000000
00:00 0
c3700000
-
c37fa000
rw-S
00000000
00:06 1369 /SYSV00000000 (deleted)
c3700000
-
c37fa000
rw-S
00000000
00:06 1369 /SYSV00000000 (deleted)
nattch 2
That's +1 to nattch for each shmat() made.
Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/nommu.c
patch
|
blob
|
history
diff --git
a/mm/nommu.c
b/mm/nommu.c
index ba6df4d2997922a337dbd7b76e67ee822cb2d371..cbbc1377481981ff26e065dbade356ec90ac0728 100644
(file)
--- a/
mm/nommu.c
+++ b/
mm/nommu.c
@@
-826,6
+826,11
@@
unsigned long do_mmap_pgoff(struct file *file,
unsigned long pglen = (len + PAGE_SIZE - 1) >> PAGE_SHIFT;
unsigned long vmpglen;
+ /* suppress VMA sharing for shared regions */
+ if (vm_flags & VM_SHARED &&
+ capabilities & BDI_CAP_MAP_DIRECT)
+ goto dont_share_VMAs;
+
for (rb = rb_first(&nommu_vma_tree); rb; rb = rb_next(rb)) {
vma = rb_entry(rb, struct vm_area_struct, vm_rb);
@@
-859,6
+864,7
@@
unsigned long do_mmap_pgoff(struct file *file,
goto shared;
}
+ dont_share_VMAs:
vma = NULL;
/* obtain the address at which to make a shared mapping