Rafael Aquini
117aad1e9e
mm: avoid reinserting isolated balloon pages into LRU lists
Isolated balloon pages can wrongly end up in LRU lists when
migrate_pages() finishes its round without draining all the isolated
page list.
The same issue can happen when reclaim_clean_pages_from_list() tries to
reclaim pages from an isolated page list, before migration, in the CMA
path. Such balloon page leak opens a race window against LRU lists
shrinkers that leads us to the following kernel panic:
BUG: unable to handle kernel NULL pointer dereference at 0000000000000028
IP: [<ffffffff810c2625>] shrink_page_list+0x24e/0x897
PGD 3cda2067 PUD 3d713067 PMD 0
Oops: 0000 [#1] SMP
CPU: 0 PID: 340 Comm: kswapd0 Not tainted 3.12.0-rc1-22626-g4367597 #87
Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
RIP: shrink_page_list+0x24e/0x897
RSP: 0000:ffff88003da499b8 EFLAGS: 00010286
RAX: 0000000000000000 RBX: ffff88003e82bd60 RCX: 00000000000657d5
RDX: 0000000000000000 RSI: 000000000000031f RDI: ffff88003e82bd40
RBP: ffff88003da49ab0 R08: 0000000000000001 R09: 0000000081121a45
R10: ffffffff81121a45 R11: ffff88003c4a9a28 R12: ffff88003e82bd40
R13: ffff88003da0e800 R14: 0000000000000001 R15: ffff88003da49d58
FS: 0000000000000000(0000) GS:ffff88003fc00000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00000000067d9000 CR3: 000000003ace5000 CR4: 00000000000407b0
Call Trace:
shrink_inactive_list+0x240/0x3de
shrink_lruvec+0x3e0/0x566
__shrink_zone+0x94/0x178
shrink_zone+0x3a/0x82
balance_pgdat+0x32a/0x4c2
kswapd+0x2f0/0x372
kthread+0xa2/0xaa
ret_from_fork+0x7c/0xb0
Code: 80 7d 8f 01 48 83 95 68 ff ff ff 00 4c 89 e7 e8 5a 7b 00 00 48 85 c0 49 89 c5 75 08 80 7d 8f 00 74 3e eb 31 48 8b 80 18 01 00 00 <48> 8b 74 0d 48 8b 78 30 be 02 00 00 00 ff d2 eb
RIP [<ffffffff810c2625>] shrink_page_list+0x24e/0x897
RSP <ffff88003da499b8>
CR2: 0000000000000028
---[ end trace 703d2451af6ffbfd ]---
Kernel panic - not syncing: Fatal exception
This patch fixes the issue, by assuring the proper tests are made at
putback_movable_pages() & reclaim_clean_pages_from_list() to avoid
isolated balloon pages being wrongly reinserted in LRU lists.
[akpm@linux-foundation.org: clarify awkward comment text]
Signed-off-by: Rafael Aquini <aquini@redhat.com>
Reported-by: Luiz Capitulino <lcapitulino@redhat.com>
Tested-by: Luiz Capitulino <lcapitulino@redhat.com>
Cc: Mel Gorman <mel@csn.ul.ie>
Cc: Rik van Riel <riel@redhat.com>
Cc: Hugh Dickins <hughd@google.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2013-09-30 14:31:02 -07:00
..
2013-09-02 11:49:56 +05:30
2013-08-26 14:09:03 -04:00
2013-08-21 09:28:29 +02:00
2013-09-09 11:15:49 -07:00
2013-08-19 14:20:21 +05:30
2013-09-06 13:21:16 -07:00
2013-09-09 16:35:29 -07:00
2013-09-10 13:33:09 -07:00
2013-09-05 14:54:29 -07:00
2013-08-26 11:32:07 -04:00
2013-08-30 21:37:01 +01:00
2013-09-16 20:35:55 +02:00
2013-08-28 13:34:41 +02:00
2013-09-12 11:35:33 -07:00
2013-08-30 17:34:52 -07:00
2013-09-10 13:03:41 -07:00
2013-09-01 13:50:20 +01:00
2013-09-10 13:33:09 -07:00
2013-09-10 20:04:59 -07:00
2013-09-05 14:54:29 -07:00
2013-08-25 09:39:12 -04:00
2013-09-11 15:58:04 -07:00
2013-09-30 14:31:02 -07:00
2013-09-11 15:59:04 -07:00
2013-09-21 13:57:47 -06:00
2013-09-04 09:23:46 -04:00
2013-08-30 23:44:11 -07:00
2013-08-26 18:40:56 -04:00
2013-08-19 12:27:17 -07:00
2013-08-27 17:50:38 -07:00
2013-09-11 15:56:57 -07:00
2013-09-11 15:58:25 -07:00
2013-09-13 15:09:52 +02:00
2013-08-27 01:44:40 +02:00
2013-09-10 02:54:50 +02:00
2013-09-11 15:59:10 -07:00
2013-09-07 12:56:26 +10:00
2013-09-10 18:56:29 -04:00
2013-08-27 22:09:12 -07:00
2013-09-20 10:36:34 -04:00
2013-09-09 10:26:33 -07:00
2013-08-27 09:18:29 +02:00
2013-08-29 21:55:23 -04:00
2013-09-10 13:37:36 -07:00
2013-09-03 20:57:49 -04:00
2013-09-07 19:54:57 -04:00
2013-08-26 20:15:23 +09:00
2013-08-22 22:13:54 -07:00
2013-09-12 10:12:47 -07:00
2013-09-13 23:06:40 -04:00
2013-09-06 09:17:30 +01:00
2013-09-06 09:17:30 +01:00
2013-09-03 07:41:11 +02:00
2013-09-11 15:57:35 -07:00
2013-09-13 15:09:52 +02:00
2013-08-30 08:42:01 +10:00
2013-08-26 13:46:11 +02:00
2013-08-26 13:46:11 +02:00
2013-09-13 15:11:21 +02:00
2013-08-26 21:40:24 +02:00
2013-09-12 15:38:03 -07:00
2013-09-11 15:57:49 -07:00
2013-09-26 14:20:21 -07:00
2013-08-23 10:22:29 +02:00
2013-08-26 09:30:03 -07:00
2013-08-29 14:08:24 -04:00
2013-08-22 20:30:15 -07:00
2013-09-11 15:59:37 -07:00
2013-09-13 15:09:52 +02:00
2013-09-11 15:59:42 -07:00
2013-08-29 15:32:08 -04:00
2013-09-13 15:09:52 +02:00
2013-09-13 15:09:52 +02:00
2013-09-13 15:09:52 +02:00
2013-08-20 11:46:54 -07:00
2013-09-13 15:09:52 +02:00
2013-08-28 21:35:14 -07:00
2013-09-11 15:58:52 -07:00
2013-09-17 12:52:31 +03:00
2013-08-25 09:39:12 -04:00
2013-09-10 18:56:32 -04:00
2013-09-07 15:49:18 -07:00
2013-09-11 15:59:45 -07:00
2013-08-23 09:02:14 -04:00
2013-09-11 15:57:51 -07:00
2013-09-24 17:00:26 -07:00
2013-08-21 11:52:20 -07:00
2013-09-11 15:57:48 -07:00
2013-08-22 23:20:54 +08:00
2013-09-13 10:55:58 -07:00
2013-09-11 15:58:01 -07:00
2013-09-13 10:55:58 -07:00
2013-09-12 15:38:03 -07:00
2013-09-11 15:58:01 -07:00
2013-09-07 09:48:41 -07:00
2013-09-03 16:35:47 +09:30
2013-08-20 15:37:42 +09:30
2013-09-28 12:46:21 +02:00
2013-09-08 20:20:23 -04:00
2013-09-15 22:18:13 -04:00
2013-08-28 00:26:48 +02:00
2013-09-06 14:49:16 -04:00
2013-09-03 15:26:29 -04:00
2013-09-05 10:40:45 -04:00
2013-08-27 13:52:52 -04:00
2013-09-03 16:40:32 -04:00
2013-08-21 10:29:51 +01:00
2013-09-10 13:53:52 -07:00
2013-09-24 21:12:32 -05:00
2013-08-28 20:50:19 +01:00
2013-08-27 10:53:44 +02:00
2013-09-10 13:53:52 -07:00
2013-09-03 22:52:48 -04:00
2013-09-05 14:54:29 -07:00
2013-09-15 17:41:30 -04:00
2013-09-06 13:30:06 -07:00
2013-09-09 14:29:15 -07:00
2013-08-23 16:08:27 -04:00
2013-09-04 11:55:10 -07:00
2013-08-27 18:42:48 -07:00
2013-08-19 21:22:34 -07:00
2013-08-19 10:18:11 -07:00
2013-08-20 16:53:58 -05:00
2013-09-11 15:59:36 -07:00
2013-09-11 15:59:37 -07:00
2013-09-11 15:59:20 -07:00
2013-08-18 17:40:16 -07:00
2013-08-31 14:43:50 -07:00
2013-09-03 10:07:40 -07:00
2013-09-12 15:38:02 -07:00
2013-09-12 15:38:02 -07:00
2013-09-12 09:25:23 -07:00
2013-08-27 14:25:27 +05:30
2013-08-20 17:10:41 -07:00
2013-08-27 14:25:09 +05:30
2013-09-10 18:56:32 -04:00
2013-09-01 14:16:33 -07:00
2013-09-04 00:27:25 -04:00
2013-09-04 20:51:33 +03:00
2013-09-04 23:11:42 +03:00
2013-09-04 20:53:16 +03:00
2013-09-24 17:00:25 -07:00
2013-08-30 17:26:09 -04:00
2013-09-12 15:38:02 -07:00
2013-09-11 15:58:25 -07:00
2013-08-28 09:51:41 -07:00
2013-08-29 13:54:34 -07:00
2013-09-03 09:10:24 -04:00
2013-09-12 07:49:51 +02:00
2013-09-07 14:35:32 -07:00
2013-08-29 13:30:21 +10:00
2013-09-03 19:17:59 +02:00
2013-09-11 15:57:09 -07:00
2013-09-03 18:25:03 -07:00
2013-09-11 15:58:01 -07:00
2013-08-22 08:53:30 -07:00
2013-09-11 15:58:02 -07:00