Skip to content
  • Rafael J. Wysocki's avatar
    PM / Hibernate: Fix s2disk regression related to freezing workqueues · 181e9bde
    Rafael J. Wysocki authored
    Commit 2aede851
    
      PM / Hibernate: Freeze kernel threads after preallocating memory
    
    introduced a mechanism by which kernel threads were frozen after
    the preallocation of hibernate image memory to avoid problems with
    frozen kernel threads not responding to memory freeing requests.
    However, it overlooked the s2disk code path in which the
    SNAPSHOT_CREATE_IMAGE ioctl was run directly after SNAPSHOT_FREE,
    which caused freeze_workqueues_begin() to BUG(), because it saw
    that worqueues had been already frozen.
    
    Although in principle this issue might be addressed by removing
    the relevant BUG_ON() from freeze_workqueues_begin(), that would
    reintroduce the very problem that commit 2aede851
    
    
    attempted to avoid into that particular code path.  For this reason,
    to fix the issue at hand, introduce thaw_kernel_threads() and make
    the SNAPSHOT_FREE ioctl execute it.
    
    Special thanks to Srivatsa S. Bhat for detailed analysis of the
    problem.
    
    Reported-and-tested-by: default avatarJiri Slaby <jslaby@suse.cz>
    Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
    Acked-by: default avatarSrivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
    Cc: stable@kernel.org
    181e9bde