• Rafael J. Wysocki's avatar
    PM / Hibernate: Freeze kernel threads after preallocating memory · 2aede851
    Rafael J. Wysocki authored
    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: default avatarChristoph <cr2005@u-club.de>
    Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
    2aede851
power.h 7.21 KB