Title: [9834] trunk/fs/ramfs/file-nommu.c: ramfs: fix memleak on no-mmu arch
- Revision
- 9834
- Author
- vapier
- Date
- 2011-04-14 02:04:44 -0400 (Thu, 14 Apr 2011)
Log Message
ramfs: fix memleak on no-mmu arch
From: Bob Liu <[email protected]>
On no-mmu arch, there is a memleak duirng shmem test.
The cause of this memleak is ramfs_nommu_expand_for_mapping() added page
refcount to 2 which makes iput() can't free that pages.
The simple test file is like this:
int main(void)
{
int i;
key_t k = ftok("/etc", 42);
for ( i=0; i<100; ++i) {
int id = shmget(k, 10000, 0644|IPC_CREAT);
if (id == -1) {
printf("shmget error\n");
}
if(shmctl(id, IPC_RMID, NULL ) == -1) {
printf("shm rm error\n");
return -1;
}
}
printf("run ok...\n");
return 0;
}
And the result:
root:/> free
total used free shared buffers
Mem: 60320 16644 43676 0 0
-/+ buffers: 16644 43676
root:/> shmem
run ok...
root:/> free
total used free shared buffers
Mem: 60320 17912 42408 0 0
-/+ buffers: 17912 42408
root:/> shmem
run ok...
root:/> free
total used free shared buffers
Mem: 60320 19096 41224 0 0
-/+ buffers: 19096 41224
root:/> shmem
run ok...
root:/> free
total used free shared buffers
Mem: 60320 20296 40024 0 0
-/+ buffers: 20296 40024
root:/> shmem
run ok...
root:/> free
total used free shared buffers
Mem: 60320 21496 38824 0 0
-/+ buffers: 21496 38824
root:/> shmem
run ok...
root:/> free
total used free shared buffers
Mem: 60320 22692 37628 0 0
-/+ buffers: 22692 37628
root:/>
After this patch the test result is:(no memleak anymore)
root:/>
root:/> free
total used free shared buffers
Mem: 60320 16580 43740 0 0
-/+ buffers: 16580 43740
root:/> shmem
run ok...
root:/> free
total used free shared buffers
Mem: 60320 16668 43652 0 0
-/+ buffers: 16668 43652
root:/> shmem
run ok...
root:/> free
total used free shared buffers
Mem: 60320 16668 43652 0 0
-/+ buffers: 16668 43652
root:/> shmem
run ok...
root:/> free
total used free shared buffers
Mem: 60320 16668 43652 0 0
-/+ buffers: 16668 43652
root:/> shmem
run ok...
root:/> free
total used free shared buffers
Mem: 60320 16668 43652 0 0
-/+ buffers: 16668 43652
root:/> shmem
run ok...
root:/> free
total used free shared buffers
Mem: 60320 16668 43652 0 0
-/+ buffers: 16668 43652
root:/>
Modified Paths
Diff
Modified: trunk/fs/ramfs/file-nommu.c (9833 => 9834)
--- trunk/fs/ramfs/file-nommu.c 2011-04-13 23:46:56 UTC (rev 9833)
+++ trunk/fs/ramfs/file-nommu.c 2011-04-14 06:04:44 UTC (rev 9834)
@@ -112,6 +112,7 @@
SetPageDirty(page);
unlock_page(page);
+ put_page(page);
}
return 0;
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits