[Bugme-janitors] [Bug 9182] Critical memory leak (dirty pages)

bugme-daemon at bugzilla.kernel.org bugme-daemon at bugzilla.kernel.org
Wed Dec 19 14:51:20 PST 2007


http://bugzilla.kernel.org/show_bug.cgi?id=9182





------- Comment #57 from olel at ans.pl  2007-12-19 14:51 -------


On Wed, 19 Dec 2007, Krzysztof Oledzki wrote:

>
>
> On Wed, 19 Dec 2007, Linus Torvalds wrote:
>
>> 
>> 
>> On Wed, 19 Dec 2007, Linus Torvalds wrote:
>>> 
>>>> but I'd really like to understand how that page got marked dirty again,
>>>> and why it seems to be related to "data=journal".
>>> 
>>> That still holds. I'd really like to understand why/how this triggers.
>> 
>> Hmm. "truncate_complete_page()" does:
>>
>>        cancel_dirty_page(page, PAGE_CACHE_SIZE);
>>
>>        if (PagePrivate(page))
>>                do_invalidatepage(page, 0);
>>
>>        remove_from_page_cache(page);
>> 
>> and yes, that "do_invalidatepage()" calls down to the filesystem layer
>> (mapping->a_ops->invalidatepage), and yes, this all goes into the
>> journalling code.
>> 
>> So at a guess, the bug would go away if we just moved the
>> "cancel_dirty_page()" to *after* the do_invalidatepage() case, although I
>> wonder if we had some reason to do it in that order (ie maybe
>> do_invalidatepage() likes to see the page being clean).
>> 
>> Anyway, I think the fixups I added to __remove_from_page_cache() seem to
>> continually become a better idea, considering that we let the filesystem
>> mess around with the page in between, and if the filesystem messes with
>> the dirty bits, it really means that the VM shouldn't just rely on it
>> remaining clean.
>> 
>> But I still want/hope-for a confirmation from Krzysztof that the patch
>> actually fixes it for him too. At which point I'll just commit it without
>> the stack dumping.
>
> Just booted the system with 2.6.24-rc5+the debug/fixup patch. It took 2 
> minutes to get this:
>
> WARNING: at mm/filemap.c:132 __remove_from_page_cache()
> Pid: 3734, comm: lmtp Not tainted 2.6.24-rc5 #1
> [<c014d772>] __remove_from_page_cache+0x87/0xe6
> [<c014d7f3>] remove_from_page_cache+0x22/0x2b
> [<c015327f>] truncate_complete_page+0x2b/0x3f
> [<c0153367>] truncate_inode_pages_range+0xd4/0x2d8
> [<c018b96e>] inotify_inode_is_dead+0x1a/0x70
> [<c018b96e>] inotify_inode_is_dead+0x1a/0x70
> [<c0245f52>] _atomic_dec_and_lock+0x2a/0x48
> [<c0153582>] truncate_inode_pages+0x17/0x1d
> [<c01a5b39>] ext3_delete_inode+0x13/0xbb
> [<c01a5b26>] ext3_delete_inode+0x0/0xbb
> [<c0178eda>] generic_delete_inode+0x5e/0xc6
> [<c0178604>] iput+0x60/0x62
> [<c0176779>] d_kill+0x2d/0x46
> [<c0176a94>] dput+0xdc/0xe4
> [<c01697c4>] __fput+0x113/0x13d
> [<c016727d>] filp_close+0x51/0x58
> [<c0168315>] sys_close+0x70/0xab
> [<c0103e92>] sysenter_past_esp+0x5f/0xa5
> =======================
>
> WARNING: at mm/filemap.c:132 __remove_from_page_cache()
> Pid: 3738, comm: smtp Not tainted 2.6.24-rc5 #1
> [<c014d772>] __remove_from_page_cache+0x87/0xe6
> [<c014d7f3>] remove_from_page_cache+0x22/0x2b
> [<c015327f>] truncate_complete_page+0x2b/0x3f
> [<c0153367>] truncate_inode_pages_range+0xd4/0x2d8
> [<c018b96e>] inotify_inode_is_dead+0x1a/0x70
> [<c018b96e>] inotify_inode_is_dead+0x1a/0x70
> [<c0245f52>] _atomic_dec_and_lock+0x2a/0x48
> [<c0153582>] truncate_inode_pages+0x17/0x1d
> [<c01a5b39>] ext3_delete_inode+0x13/0xbb
> [<c01a5b26>] ext3_delete_inode+0x0/0xbb
> [<c0178eda>] generic_delete_inode+0x5e/0xc6
> [<c0178604>] iput+0x60/0x62
> [<c0176779>] d_kill+0x2d/0x46
> [<c0176a94>] dput+0xdc/0xe4
> [<c01697c4>] __fput+0x113/0x13d
> [<c016727d>] filp_close+0x51/0x58
> [<c0168315>] sys_close+0x70/0xab
> [<c0103e92>] sysenter_past_esp+0x5f/0xa5
> =======================
>
> ole at cougar:~$ dmesg |grep -c __remove_from_page_cache
> 10
>
> ole at cougar:~$ uptime
> 22:53:09 up 2 min,  1 user,  load average: 0.57, 0.37, 0.14

Little different call trace:

WARNING: at mm/filemap.c:132 __remove_from_page_cache()
Pid: 3468, comm: qmgr Not tainted 2.6.24-rc5 #1
  [<c014d772>] __remove_from_page_cache+0x87/0xe6
  [<c014d7f3>] remove_from_page_cache+0x22/0x2b
  [<c015327f>] truncate_complete_page+0x2b/0x3f
  [<c0153367>] truncate_inode_pages_range+0xd4/0x2d8
  [<c0245f52>] _atomic_dec_and_lock+0x2a/0x48
  [<c0153582>] truncate_inode_pages+0x17/0x1d
  [<c01a5b39>] ext3_delete_inode+0x13/0xbb
  [<c01a5b26>] ext3_delete_inode+0x0/0xbb
  [<c0178eda>] generic_delete_inode+0x5e/0xc6
  [<c0178604>] iput+0x60/0x62
  [<c0170ebd>] do_unlinkat+0xbf/0x133
  [<c017a9c9>] mntput_no_expire+0x11/0x5c
  [<c016727d>] filp_close+0x51/0x58
  [<c0103e92>] sysenter_past_esp+0x5f/0xa5

Best regards,

                                Krzysztof Olêdzki


-- 
Configure bugmail: http://bugzilla.kernel.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.



More information about the Bugme-janitors mailing list