linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* 2.6.5-rc2-aa5
@ 2004-03-29 15:06 Andrea Arcangeli
  2004-03-29 20:48 ` 2.6.5-rc2-aa5 Andrew Morton
  0 siblings, 1 reply; 101+ messages in thread
From: Andrea Arcangeli @ 2004-03-29 15:06 UTC (permalink / raw)
  To: linux-kernel; +Cc: Andrew Morton, Hugh Dickins

More fixes. Notably there is a BUG_ON(page->mapping) triggering in
page_remove_rmap in the pagecache case. that could be ex-pagecache being
removed from pagecache before all ptes have been zapped, infact the
page_remove_rmap triggers in the vmtruncate path.

I believe that is an harmless controlled race, that could happen in 2.4
too IIRC, so I turned the BUG_ON into a WARN_ON and I added a further
WARN_ON(page->mapcount) in remove_from_pagecache so that I will see two
WARN_ON instead of just one, and the first WARN_ON will be the new one.
This will give confirmation that it's not a deadly condition but just a
controlled race, and I will see the path that is generating this
controlled race to verify it's not a mistake.

Note that this was triggering even before the anon-vma patch was
applied, at the very least this triggers with just objrmap from Dave
applied, and probably it can trigger with mainline 2.6 too.

Comments from Andrew, Hugh, and others about this race are welcome
thanks.

this is the oops on top of my current code:

ar 29 09:40:47 linux kernel: ------------[ cut here ]------------
Mar 29 09:40:47 linux kernel: kernel BUG at mm/objrmap.c:354!
Mar 29 09:40:47 linux kernel: invalid operand: 0000 [#1]
Mar 29 09:40:47 linux kernel: CPU:    0
Mar 29 09:40:47 linux kernel: EIP:    0060:[page_remove_rmap+117/128]    Not tainted
Mar 29 09:40:47 linux kernel: EIP:    0060:[<c014a1e5>]    Not tainted
Mar 29 09:40:47 linux kernel: EFLAGS: 00010246   (2.6.4-32.4-default) 
Mar 29 09:40:47 linux kernel: EIP is at page_remove_rmap+0x75/0x80
Mar 29 09:40:47 linux kernel: eax: 00000000   ebx: cbcd24e0   ecx: 000013cd   edx: c1093640
Mar 29 09:40:47 linux kernel: esi: 00000000   edi: 00001000   ebp: c1093640   esp: c79d9d8c
Mar 29 09:40:47 linux kernel: ds: 007b   es: 007b   ss: 0068
Mar 29 09:40:47 linux kernel: Process ld-linux.so.2 (pid: 3751, threadinfo=c79d8000 task=c217f830)
Mar 29 09:40:47 linux kernel: Stack: c0145155 049b2025 40538000 c53a6400 40139000 40138000 c53a6400 40139000 
Mar 29 09:40:47 linux kernel:        c03f9b38 00001000 40139000 40139000 40139000 c014539b 40139000 00000000 
Mar 29 09:40:47 linux kernel:        c79d8000 00000001 00000001 ffffffff cbd12200 cc6a0780 c79d9e08 cbd12200 
Mar 29 09:40:47 linux kernel: Call Trace:
Mar 29 09:40:47 linux kernel:  [unmap_page_range+405/688] unmap_page_range+0x195/0x2b0
Mar 29 09:40:47 linux kernel:  [<c0145155>] unmap_page_range+0x195/0x2b0
Mar 29 09:40:47 linux kernel:  [unmap_vmas+299/640] unmap_vmas+0x12b/0x280
Mar 29 09:40:47 linux kernel:  [<c014539b>] unmap_vmas+0x12b/0x280
Mar 29 09:40:47 linux kernel:  [zap_page_range+116/192] zap_page_range+0x74/0xc0
Mar 29 09:40:47 linux kernel:  [<c0145564>] zap_page_range+0x74/0xc0
Mar 29 09:40:47 linux kernel:  [invalidate_mmap_range_list+162/176] invalidate_mmap_range_list+0xa2/0xb0
Mar 29 09:40:47 linux kernel:  [<c0145652>] invalidate_mmap_range_list+0xa2/0xb0
Mar 29 09:40:47 linux kernel:  [invalidate_mmap_range+144/160] invalidate_mmap_range+0x90/0xa0
Mar 29 09:40:47 linux kernel:  [<c01456f0>] invalidate_mmap_range+0x90/0xa0
Mar 29 09:40:47 linux kernel:  [vmtruncate+62/208] vmtruncate+0x3e/0xd0
Mar 29 09:40:47 linux kernel:  [<c014573e>] vmtruncate+0x3e/0xd0
Mar 29 09:40:47 linux kernel:  [__crc_unregister_framebuffer+5198340/6716426] linvfs_setattr+0x191/0x1a0 [xfs]
Mar 29 09:40:47 linux kernel:  [<cfa84841>] linvfs_setattr+0x191/0x1a0 [xfs]
Mar 29 09:40:47 linux kernel:  [notify_change+514/576] notify_change+0x202/0x240
Mar 29 09:40:47 linux kernel:  [<c016a172>] notify_change+0x202/0x240
Mar 29 09:40:47 linux kernel:  [do_truncate+78/128] do_truncate+0x4e/0x80
Mar 29 09:40:47 linux kernel:  [<c0151dde>] do_truncate+0x4e/0x80
Mar 29 09:40:47 linux kernel:  [sys_ftruncate+225/384] sys_ftruncate+0xe1/0x180
Mar 29 09:40:47 linux kernel:  [<c0152731>] sys_ftruncate+0xe1/0x180
Mar 29 09:40:47 linux kernel:  [generic_file_llseek+0/208] generic_file_llseek+0x0/0xd0
Mar 29 09:40:47 linux kernel:  [<c0152ed0>] generic_file_llseek+0x0/0xd0
Mar 29 09:40:47 linux kernel:  [sys_llseek+171/212] sys_llseek+0xab/0xd4
Mar 29 09:40:47 linux kernel:  [<c0153f5b>] sys_llseek+0xab/0xd4
Mar 29 09:40:47 linux kernel:  [syscall_call+7/11] syscall_call+0x7/0xb
Mar 29 09:40:47 linux kernel:  [<c0107e27>] syscall_call+0x7/0xb
Mar 29 09:40:47 linux kernel: 
Mar 29 09:40:47 linux kernel: Code: 0f 0b 62 01 1e 3b 30 c0 eb d8 90 55 57 56 53 89 c3 89 cd 8b 

This is the same oops but with a kernel before anon-vma was applied (so with
only the objrmap from Dave, and I think it would trigger with mainline 2.6
regardless of objrmap):

Mar 19 18:33:48 linux kernel: ------------[ cut here ]------------
Mar 19 18:33:48 linux kernel: kernel BUG at mm/rmap.c:393!
Mar 19 18:33:48 linux kernel: invalid operand: 0000 [#1]
Mar 19 18:33:48 linux kernel: CPU:    0
Mar 19 18:33:48 linux kernel: EIP:    0060:[page_remove_rmap+219/384]    Not tainted
Mar 19 18:33:48 linux kernel: EIP:    0060:[<c0148beb>]    Not tainted
Mar 19 18:33:48 linux kernel: EFLAGS: 00010246   (2.6.4-9.19-default) 
Mar 19 18:33:48 linux kernel: EIP is at page_remove_rmap+0xdb/0x180
Mar 19 18:33:48 linux kernel: eax: 00000000   ebx: 000004e0   ecx: 00000001  
edx: c1000000
Mar 19 18:33:48 linux kernel: esi: c115fce0   edi: 00000000   ebp: 0b3d54e0  
esp: c4e79d74
Mar 19 18:33:48 linux kernel: ds: 007b   es: 007b   ss: 0068
Mar 19 18:33:48 linux kernel: Process ld-linux.so.2 (pid: 2899,
threadinfo=c4e78000 task=c66fe780)
Mar 19 18:33:48 linux kernel: Stack: 00000e09 000001d0 c123a800 00000001
40138000 cb3d54e0 00000000 00001000 
Mar 19 18:33:48 linux kernel:        c0142e50 c115fce0 0afe7025 40538000
40139000 c97ac400 c97ac400 40139000 
Mar 19 18:33:48 linux kernel:        c03f5c18 00001000 40139000 40139000
40139000 c014304b 40139000 00000000 
Mar 19 18:33:48 linux kernel: Call Trace:
Mar 19 18:33:48 linux kernel:  [unmap_page_range+464/672]
unmap_page_range+0x1d0/0x2a0
Mar 19 18:33:48 linux kernel:  [<c0142e50>] unmap_page_range+0x1d0/0x2a0
Mar 19 18:33:48 linux kernel:  [unmap_vmas+299/640] unmap_vmas+0x12b/0x280
Mar 19 18:33:48 linux kernel:  [<c014304b>] unmap_vmas+0x12b/0x280
Mar 19 18:33:48 linux kernel:  [zap_page_range+116/192] zap_page_range+0x74/0xc0
Mar 19 18:33:48 linux kernel:  [<c0143214>] zap_page_range+0x74/0xc0
Mar 19 18:33:48 linux kernel:  [invalidate_mmap_range_list+162/176]
invalidate_mmap_range_list+0xa2/0xb0
Mar 19 18:33:48 linux kernel:  [<c0143302>] invalidate_mmap_range_list+0xa2/0xb0
Mar 19 18:33:48 linux kernel:  [invalidate_mmap_range+144/160]
invalidate_mmap_range+0x90/0xa0
Mar 19 18:33:48 linux kernel:  [<c01433a0>] invalidate_mmap_range+0x90/0xa0
Mar 19 18:33:48 linux kernel:  [vmtruncate+62/208] vmtruncate+0x3e/0xd0
Mar 19 18:33:48 linux kernel:  [<c01433ee>] vmtruncate+0x3e/0xd0
Mar 19 18:33:48 linux kernel:  [__crc_cap_capset_set+547932/2369266]
linvfs_setattr+0x191/0x1a0 [xfs]
Mar 19 18:33:48 linux kernel:  [<cfa3a7b1>] linvfs_setattr+0x191/0x1a0 [xfs]
Mar 19 18:33:48 linux kernel:  [notify_change+504/576] notify_change+0x1f8/0x240
Mar 19 18:33:48 linux kernel:  [<c0168708>] notify_change+0x1f8/0x240
Mar 19 18:33:48 linux kernel:  [do_truncate+54/80] do_truncate+0x36/0x50
Mar 19 18:33:48 linux kernel:  [<c0150436>] do_truncate+0x36/0x50
Mar 19 18:33:48 linux kernel:  [sys_fstat64+35/48] sys_fstat64+0x23/0x30
Mar 19 18:33:48 linux kernel:  [<c015a2d3>] sys_fstat64+0x23/0x30
Mar 19 18:33:48 linux kernel:  [sys_ftruncate+225/384] sys_ftruncate+0xe1/0x180
Mar 19 18:33:48 linux kernel:  [<c0150d71>] sys_ftruncate+0xe1/0x180
Mar 19 18:33:48 linux kernel:  [generic_file_llseek+0/208]
generic_file_llseek+0x0/0xd0
Mar 19 18:33:48 linux kernel:  [<c01514f0>] generic_file_llseek+0x0/0xd0
Mar 19 18:33:48 linux kernel:  [sys_llseek+171/212] sys_llseek+0xab/0xd4
Mar 19 18:33:48 linux kernel:  [<c015257b>] sys_llseek+0xab/0xd4
Mar 19 18:33:48 linux kernel:  [syscall_call+7/11] syscall_call+0x7/0xb
Mar 19 18:33:48 linux kernel:  [<c0106e27>] syscall_call+0x7/0xb
Mar 19 18:33:48 linux kernel: 
Mar 19 18:33:48 linux kernel: Code: 0f 0b 89 01 d7 f4 2f c0 3d 60 cb 33 c0 74 2d
85 c9 75 08 0f 
Mar 19 18:33:48 linux kernel:  <6>note: ld-linux.so.2[2899] exited with
preempt_count 1


the testcase is a:

	rpm -i glibc-2.3.2-92.src.rpm
	rpmbuild -ba /usr/src/packages/SPECS/glibc.spec

I will wait feedback after my WARN_ON addition, if my theory is right this new
tree will survive the load with just two WARN_ON triggers (one in vmtruncate
like the above, and the other new one in remove_from_page_cache).

Hugh, I didn't look into your nonlinear-more-graceful-swapout algorithm
yet, but my first prio at the moment is to get the nonlinaer in a I/O
bound manner, making it graceful is very low prio, especially if it
makes the code less obvious.

	http://www.us.kernel.org/pub/linux/kernel/people/andrea/kernels/v2.6/2.6.5-rc2-aa5.gz
	http://www.us.kernel.org/pub/linux/kernel/people/andrea/kernels/v2.6/2.6.5-rc2-aa5/

Binary files 2.6.5-rc2-aa4/anon-vma.gz and 2.6.5-rc2-aa5/anon-vma.gz differ

	Add bugcheck for page->mapcount == 0 in alloc/free page paths
	(just in case).

	Convert BUG_ON to WARN_ON in page_remove_rmap and added a
	WARN_ON(page->mapcount) in remove_from_page_cache, to try
	to trap the case of pages being removed from pagecache while
	they still had some mapping.

	Fix ppc (patch was superflous apparently, so backed out, only
	ppc64 required fixing).

Binary files 2.6.5-rc2-aa4/prio-tree.gz and 2.6.5-rc2-aa5/prio-tree.gz differ

	Fixup nonlinear swapout from Rajesh Venkatasubramanian.

	Fixed a bugcheck after a split_vma of a MAP_PRIVATE with some anon page
	on it.

^ permalink raw reply	[flat|nested] 101+ messages in thread

end of thread, other threads:[~2004-04-20 22:56 UTC | newest]

Thread overview: 101+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <Pine.LNX.4.44.0403150527400.28579-100000@localhost.localdomain>
2004-03-21 22:10 ` [RFC][PATCH 1/3] radix priority search tree - objrmap complexity fix Rajesh Venkatasubramanian
2004-03-21 22:12   ` [RFC][PATCH 2/3] Dave & Hugh's objrmap patch Rajesh Venkatasubramanian
2004-03-21 22:13   ` [RFC][PATCH 3/3] Covert objrmap to use prio_tree Rajesh Venkatasubramanian
2004-03-21 22:26   ` URL typo Rajesh Venkatasubramanian
2004-03-22  0:46   ` [RFC][PATCH 1/3] radix priority search tree - objrmap complexity fix Andrea Arcangeli
2004-03-22  2:32     ` Rik van Riel
2004-03-22  3:49     ` Rajesh Venkatasubramanian
2004-03-22  4:02       ` Rik van Riel
2004-03-22  4:21         ` put_super for proc Abhishek Rai
2004-03-22 12:04           ` Maneesh Soni
2004-03-25 22:59   ` [RFC][PATCH 1/3] radix priority search tree - objrmap complexity fix Andrea Arcangeli
2004-03-26  4:06     ` Rajesh Venkatasubramanian
2004-03-26  7:53       ` Andrea Arcangeli
2004-03-26 15:43         ` Rajesh Venkatasubramanian
2004-03-26 17:58           ` Andrea Arcangeli
2004-03-27 19:51             ` Rajesh Venkatasubramanian
2004-03-29 17:22               ` Andrea Arcangeli
2004-03-29 17:50                 ` Rajesh Venkatasubramanian
2004-03-29 18:01                   ` Andrea Arcangeli
2004-03-29 20:40                     ` Andrew Morton
2004-03-29 22:24                       ` Hugh Dickins
2004-03-29 22:54                         ` Andrea Arcangeli
2004-03-29 23:08                         ` William Lee Irwin III
2004-03-29 22:39                       ` Andrea Arcangeli
2004-03-29 22:42                         ` Andrew Morton
2004-03-31 15:07                           ` Andrea Arcangeli
2004-03-31 15:26                             ` Andrea Arcangeli
2004-03-31 16:45                             ` Hugh Dickins
2004-03-31 17:28                               ` Andrea Arcangeli
2004-04-01  0:45                                 ` Andrea Arcangeli
2004-04-01  1:22                                   ` Andrew Morton
2004-04-01  1:26                                     ` Andrea Arcangeli
2004-04-01  1:51                                       ` Andrew Morton
2004-04-01  2:01                                         ` Andrea Arcangeli
2004-04-01  5:05                                           ` Hugh Dickins
2004-04-01 13:35                                             ` Andrea Arcangeli
2004-04-01 15:09                                               ` Andrea Arcangeli
2004-04-01 15:15                                                 ` Andrea Arcangeli
2004-04-02  0:15                                                   ` Andrea Arcangeli
2004-04-02  0:52                                                     ` Andrew Morton
2004-04-02  1:06                                                       ` Andrea Arcangeli
2004-04-02  1:03                                                     ` Hugh Dickins
2004-04-02  1:16                                                       ` Andrea Arcangeli
2004-04-02  1:36                                                         ` Andrew Morton
2004-04-02  2:00                                                           ` Andrea Arcangeli
2004-04-02  2:08                                                             ` Andrew Morton
2004-04-02  2:22                                                               ` Andrea Arcangeli
2004-04-02  6:05                                                                 ` Christoph Hellwig
2004-04-02  7:07                                                                   ` Paul Mackerras
2004-04-02  7:11                                                                     ` Christoph Hellwig
2004-04-02 15:28                                                                     ` Andrea Arcangeli
2004-04-02 15:22                                                                   ` Andrea Arcangeli
2004-04-02 15:27                                                                     ` Christoph Hellwig
2004-04-02 15:38                                                                       ` Andrea Arcangeli
2004-04-02 15:45                                                                         ` Andrea Arcangeli
2004-04-02  9:43                                                             ` Christoph Hellwig
2004-04-02 10:21                                                               ` Marc-Christian Petersen
2004-04-02 10:55                                                                 ` Hugh Dickins
2004-04-02 16:46                                                               ` Andrea Arcangeli
2004-04-02 18:59                                                                 ` Christoph Hellwig
2004-04-02 19:29                                                                   ` Andrea Arcangeli
2004-04-02 19:54                                                                     ` Christoph Hellwig
2004-04-02 20:35                                                                       ` Andrea Arcangeli
2004-04-03  8:40                                                                         ` Christoph Hellwig
2004-04-03 15:20                                                                           ` Andrea Arcangeli
2004-04-03 15:59                                                                             ` Andrea Arcangeli
2004-04-03 17:02                                                                               ` Andrea Arcangeli
2004-04-05  9:59                                                                                 ` Christoph Hellwig
2004-04-05 12:11                                                                                   ` Christoph Hellwig
2004-04-05 16:08                                                                                     ` Andrea Arcangeli
2004-04-06  4:22                                                                                     ` Andrea Arcangeli
2004-04-06  4:43                                                                                       ` Andrew Morton
2004-04-06  5:14                                                                                         ` Christoph Hellwig
2004-04-06 21:54                                                                                         ` Andrea Arcangeli
2004-04-07  1:39                                                                                           ` Nathan Scott
2004-04-06  5:16                                                                                       ` Christoph Hellwig
2004-04-06 16:01                                                                                         ` Andrea Arcangeli
2004-04-07  1:33                                                                                           ` Nathan Scott
2004-04-03 17:40                                                                 ` Andrea Arcangeli
2004-04-03 20:02                                                                   ` Andrew Morton
2004-04-03 23:27                                                                     ` Andrea Arcangeli
2004-04-03 23:46                                                                       ` Andrew Morton
2004-04-04  0:40                                                                         ` Andrea Arcangeli
2004-04-08 19:10                                                                   ` Bill Davidsen
2004-04-20 22:29                                                                     ` Pavel Machek
2004-04-02 20:13                                           ` Pavel Machek
2004-04-02 21:42                                             ` Andrea Arcangeli
2004-04-02 21:45                                               ` Pavel Machek
2004-04-02 21:49                                                 ` Andrea Arcangeli
2004-03-29 18:12                 ` Hugh Dickins
2004-03-29 18:20                   ` Andrea Arcangeli
2004-03-29 18:38                     ` Christoph Hellwig
2004-03-29 21:30                   ` 2.6.5-rc2-aa5 Rajesh Venkatasubramanian
2004-03-29 22:50                     ` 2.6.5-rc2-aa5 Andrea Arcangeli
2004-04-05  3:14       ` [RFC][PATCH 1/3] radix priority search tree - objrmap complexity fix Rajesh Venkatasubramanian
2004-04-05  4:42         ` Andrea Arcangeli
2004-03-26 12:26     ` William Lee Irwin III
2004-03-26 19:18       ` Andrea Arcangeli
2004-03-29 15:06 2.6.5-rc2-aa5 Andrea Arcangeli
2004-03-29 20:48 ` 2.6.5-rc2-aa5 Andrew Morton
2004-03-29 22:45   ` 2.6.5-rc2-aa5 Andrea Arcangeli

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).