[PATCH] NOMMU: make SYSV SHM nattch work correctly
authorDavid Howells <dhowells@redhat.com>
Thu, 22 Mar 2007 08:11:24 +0000 (00:11 -0800)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Fri, 23 Mar 2007 02:39:06 +0000 (19:39 -0700)
commit165b239270be610a1e3999cb0d2e4e2c1f2a8fd4
tree3ae32cc616047b3960d1fe33b0583faa3094b82c
parentd56e03cd275486eb8141116a7af2df7457cb0115
[PATCH] NOMMU: make SYSV SHM nattch work correctly

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