diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/power/hibernate.c | 1 | ||||
| -rw-r--r-- | kernel/power/snapshot.c | 1 | ||||
| -rw-r--r-- | kernel/power/swap.c | 6 | 
3 files changed, 5 insertions, 3 deletions
diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c index 8dc31e02ae1..c77963938bc 100644 --- a/kernel/power/hibernate.c +++ b/kernel/power/hibernate.c @@ -338,6 +338,7 @@ int hibernation_snapshot(int platform_mode)  		goto Close;  	suspend_console(); +	hibernation_freeze_swap();  	saved_mask = clear_gfp_allowed_mask(GFP_IOFS);  	error = dpm_suspend_start(PMSG_FREEZE);  	if (error) diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c index f6cd6faf84f..5e7edfb05e6 100644 --- a/kernel/power/snapshot.c +++ b/kernel/power/snapshot.c @@ -1086,6 +1086,7 @@ void swsusp_free(void)  	buffer = NULL;  	alloc_normal = 0;  	alloc_highmem = 0; +	hibernation_thaw_swap();  }  /* Helper functions used for the shrinking of memory. */ diff --git a/kernel/power/swap.c b/kernel/power/swap.c index e6a5bdf61a3..5d0059eed3e 100644 --- a/kernel/power/swap.c +++ b/kernel/power/swap.c @@ -136,10 +136,10 @@ sector_t alloc_swapdev_block(int swap)  {  	unsigned long offset; -	offset = swp_offset(get_swap_page_of_type(swap)); +	offset = swp_offset(get_swap_for_hibernation(swap));  	if (offset) {  		if (swsusp_extents_insert(offset)) -			swap_free(swp_entry(swap, offset)); +			swap_free_for_hibernation(swp_entry(swap, offset));  		else  			return swapdev_block(swap, offset);  	} @@ -163,7 +163,7 @@ void free_all_swap_pages(int swap)  		ext = container_of(node, struct swsusp_extent, node);  		rb_erase(node, &swsusp_extents);  		for (offset = ext->start; offset <= ext->end; offset++) -			swap_free(swp_entry(swap, offset)); +			swap_free_for_hibernation(swp_entry(swap, offset));  		kfree(ext);  	}  |