1
linux/kernel/power
Rafael J. Wysocki 2aede851dd PM / Hibernate: Freeze kernel threads after preallocating memory
There is a problem with the current ordering of hibernate code which
leads to deadlocks in some filesystems' memory shrinkers.  Namely,
some filesystems use freezable kernel threads that are inactive when
the hibernate memory preallocation is carried out.  Those same
filesystems use memory shrinkers that may be triggered by the
hibernate memory preallocation.  If those memory shrinkers wait for
the frozen kernel threads, the hibernate process deadlocks (this
happens with XFS, for one example).

Apparently, it is not technically viable to redesign the filesystems
in question to avoid the situation described above, so the only
possible solution of this issue is to defer the freezing of kernel
threads until the hibernate memory preallocation is done, which is
implemented by this change.

Unfortunately, this requires the memory preallocation to be done
before the "prepare" stage of device freeze, so after this change the
only way drivers can allocate additional memory for their freeze
routines in a clean way is to use PM notifiers.

Reported-by: Christoph <cr2005@u-club.de>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
2011-10-16 23:28:52 +02:00
..
block_io.c block: kill off REQ_UNPLUG 2011-03-10 08:52:27 +01:00
console.c PM / VT: Cleanup #if defined uglyness and fix compile error 2011-10-16 23:28:51 +02:00
hibernate.c PM / Hibernate: Freeze kernel threads after preallocating memory 2011-10-16 23:28:52 +02:00
Kconfig PM / Hibernate: Include storage keys in hibernation image on s390 2011-10-16 23:27:46 +02:00
main.c PM: Fix build issue in main.c for CONFIG_PM_SLEEP unset 2011-10-16 23:27:46 +02:00
Makefile PM / VT: Cleanup #if defined uglyness and fix compile error 2011-10-16 23:28:51 +02:00
power.h PM / Hibernate: Freeze kernel threads after preallocating memory 2011-10-16 23:28:52 +02:00
poweroff.c Input: sysrq - drop tty argument from sysrq ops handlers 2010-08-19 22:07:06 -07:00
process.c PM / Hibernate: Freeze kernel threads after preallocating memory 2011-10-16 23:28:52 +02:00
qos.c PM QoS: Add global notification mechanism for device constraints 2011-08-25 15:35:47 +02:00
snapshot.c PM / Hibernate: Include storage keys in hibernation image on s390 2011-10-16 23:27:46 +02:00
suspend_test.c PM: Make warning in suspend_test_finish() less likely to happen 2009-10-22 08:23:45 +09:00
suspend.c PM / Suspend: Off by one in pm_suspend() 2011-10-16 23:27:46 +02:00
swap.c Merge branch 'for-2.6.38/core' of git://git.kernel.dk/linux-2.6-block 2011-01-13 10:45:01 -08:00
user.c PM: Free memory bitmaps if opening /dev/snapshot fails 2011-06-21 23:20:06 +02:00