Rafael J. Wysocki
4d4cf23cdd
PM / Hibernate: Fix free_unnecessary_pages()
...
There is a bug in free_unnecessary_pages() that causes it to
attempt to free too many pages in some cases, which triggers the
BUG_ON() in memory_bm_clear_bit() for copy_bm. Namely, if
count_data_pages() is initially greater than alloc_normal, we get
to_free_normal equal to 0 and "save" greater from 0. In that case,
if the sum of "save" and count_highmem_pages() is greater than
alloc_highmem, we subtract a positive number from to_free_normal.
Hence, since to_free_normal was 0 before the subtraction and is
an unsigned int, the result is converted to a huge positive number
that is used as the number of pages to free.
Fix this bug by checking if to_free_normal is actually greater
than or equal to the number we're going to subtract from it.
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl >
Reported-and-tested-by: Matthew Garrett <mjg@redhat.com >
Cc: stable@kernel.org
2011-07-06 20:15:23 +02:00
..
2011-03-31 11:26:23 -03:00
2011-06-04 12:13:06 +02:00
2011-06-15 20:04:01 -07:00
2011-06-10 10:53:42 +02:00
2011-07-06 20:15:23 +02:00
2011-06-21 16:32:28 -07:00
2011-06-09 08:42:15 -04:00
2011-03-31 11:26:23 -03:00
2011-03-14 09:15:23 -04:00
2011-03-03 10:55:40 -08:00
2010-10-30 01:42:19 -04:00
2011-03-03 10:55:40 -08:00
2011-04-27 15:11:03 +02:00
2011-03-23 19:46:28 -07:00
2011-05-19 18:51:57 +10:00
2011-05-26 17:12:34 -07:00
2011-05-26 17:12:34 -07:00
2011-05-25 15:35:32 -07:00
2010-10-15 15:53:27 +02:00
2011-03-31 11:26:23 -03:00
2011-05-28 17:02:57 +02:00
2011-03-23 19:47:19 -07:00
2011-05-27 10:25:02 -07:00
2011-06-15 20:04:01 -07:00
2011-05-20 08:56:56 +02:00
2011-05-29 11:32:28 -07:00
2011-05-17 23:19:17 +02:00
2011-03-23 19:47:08 -07:00
2011-04-15 16:34:32 +02:00
2011-03-23 19:47:08 -07:00
2011-05-25 15:31:58 -07:00
2011-04-28 09:13:17 +02:00
2010-12-18 15:54:48 +01:00
2011-05-25 19:56:36 -04:00
2011-03-25 17:52:22 -07:00
2011-04-10 17:01:05 +02:00
2011-05-11 21:37:15 +02:00
2010-10-01 10:50:58 -07:00
2011-06-17 09:40:48 -07:00
2011-01-07 17:02:58 -08:00
2011-04-19 16:45:51 -07:00
2011-05-28 17:02:57 +02:00
2011-03-31 11:26:23 -03:00
2011-03-23 13:54:47 +01:00
2011-06-07 12:25:50 +02:00
2011-05-26 17:12:34 -07:00
2011-05-23 12:49:28 -07:00
2011-04-14 08:52:33 +02:00
2011-04-14 08:52:33 +02:00
2011-05-25 08:39:17 -07:00
2011-04-14 08:52:33 +02:00
2011-05-26 17:12:34 -07:00
2011-03-31 11:26:23 -03:00
2011-03-22 17:44:11 -07:00
2011-05-19 16:55:28 +09:30
2011-03-23 19:46:58 -07:00
2011-04-18 10:35:30 -07:00
2011-05-29 11:18:09 -07:00
2011-05-23 13:59:54 +02:00
2011-05-24 12:10:51 +02:00
2011-05-25 08:39:48 -07:00
2011-05-26 17:12:37 -07:00
2011-05-25 19:20:21 +02:00
2010-11-12 07:55:31 -08:00
2011-05-05 23:16:57 -07:00
2011-05-05 23:16:58 -07:00
2011-05-20 12:50:29 -07:00
2011-05-05 23:16:57 -07:00
2011-06-16 16:12:05 -07:00
2011-06-15 23:07:21 -07:00
2011-06-16 16:12:05 -07:00
2011-06-16 16:12:05 -07:00
2010-11-05 08:21:34 -07:00
2011-03-23 19:46:22 -07:00
2010-12-17 10:01:09 -08:00
2011-01-27 21:13:51 -05:00
2011-01-27 21:13:51 -05:00
2011-02-22 22:07:22 +01:00
2011-01-27 21:13:51 -05:00
2011-03-31 11:26:23 -03:00
2011-02-23 11:33:59 +01:00
2010-11-23 10:29:08 +01:00
2011-04-24 13:18:38 +02:00
2011-05-28 17:02:56 +02:00
2011-04-14 08:52:41 +02:00
2011-04-14 08:52:36 +02:00
2011-06-15 11:44:48 +02:00
2011-05-28 17:02:54 +02:00
2011-04-14 08:52:36 +02:00
2011-06-07 12:26:40 +02:00
2011-06-14 19:12:17 -07:00
2011-06-17 10:17:12 +02:00
2011-06-14 15:25:39 -07:00
2011-01-14 04:56:49 -08:00
2011-03-22 17:44:01 -07:00
2011-05-20 13:53:02 -07:00
2011-05-19 18:24:11 -07:00
2011-03-14 09:15:28 -04:00
2011-03-23 19:46:51 -07:00
2011-06-04 12:22:04 +02:00
2011-06-27 18:00:13 -07:00
2010-10-14 08:55:27 +02:00
2011-03-15 18:53:35 -07:00
2011-06-03 15:02:32 +02:00
2011-04-04 12:48:08 -04:00
2010-10-27 18:03:17 -07:00
2011-03-23 19:47:08 -07:00
2011-01-13 08:03:18 -08:00
2011-03-31 11:26:23 -03:00
2011-03-23 19:46:59 -07:00
2011-05-10 14:35:35 -07:00
2011-03-31 11:26:23 -03:00
2011-05-23 21:07:40 -07:00
2011-05-24 11:53:42 -07:00