From: Jiri Slaby <jirislaby@xxxxxxxxx> The first sector knowledge is swap only specific. Move it into the handle. This will be needed for later non-swap specific code moving inside snapshot.c. Signed-off-by: Jiri Slaby <jslaby@xxxxxxx> Cc: Nigel Cunningham <ncunningham@xxxxxxxxxxx> Cc: "Rafael J. Wysocki" <rjw@xxxxxxx> --- kernel/power/swap.c | 76 +++++++++++++++++++++++++------------------------- 1 files changed, 38 insertions(+), 38 deletions(-) diff --git a/kernel/power/swap.c b/kernel/power/swap.c index d4ff0d1..a1cff28 100644 --- a/kernel/power/swap.c +++ b/kernel/power/swap.c @@ -28,6 +28,40 @@ #define SWSUSP_SIG "S1SUSPEND" +/* + * The swap map is a data structure used for keeping track of each page + * written to a swap partition. It consists of many swap_map_page + * structures that contain each an array of MAP_PAGE_SIZE swap entries. + * These structures are stored on the swap and linked together with the + * help of the .next_swap member. + * + * The swap map is created during suspend. The swap map pages are + * allocated and populated one at a time, so we only need one memory + * page to set up the entire structure. + * + * During resume we also only need to use one swap_map_page structure + * at a time. + */ + +#define MAP_PAGE_ENTRIES (PAGE_SIZE / sizeof(sector_t) - 1) + +struct swap_map_page { + sector_t entries[MAP_PAGE_ENTRIES]; + sector_t next_swap; +}; + +/** + * The swap_map_handle structure is used for handling swap in + * a file-alike way + */ + +struct swap_map_handle { + struct swap_map_page *cur; + sector_t cur_swap; + sector_t first_sector; + unsigned int k; +}; + struct swsusp_header { char reserved[PAGE_SIZE - 20 - sizeof(sector_t) - sizeof(int)]; sector_t image; @@ -150,7 +184,7 @@ struct block_device *sws_resume_bdev; * Saving part */ -static int mark_swapfiles(sector_t start, unsigned int flags) +static int mark_swapfiles(struct swap_map_handle *handle, unsigned int flags) { int error; @@ -159,7 +193,7 @@ static int mark_swapfiles(sector_t start, unsigned int flags) !memcmp("SWAPSPACE2",swsusp_header->sig, 10)) { memcpy(swsusp_header->orig_sig,swsusp_header->sig, 10); memcpy(swsusp_header->sig,SWSUSP_SIG, 10); - swsusp_header->image = start; + swsusp_header->image = handle->first_sector; swsusp_header->flags = flags; error = sws_bio_write_page(swsusp_resume_block, swsusp_header, NULL); @@ -225,39 +259,6 @@ static int write_page(void *buf, sector_t offset, struct bio **bio_chain) return sws_bio_write_page(offset, src, bio_chain); } -/* - * The swap map is a data structure used for keeping track of each page - * written to a swap partition. It consists of many swap_map_page - * structures that contain each an array of MAP_PAGE_SIZE swap entries. - * These structures are stored on the swap and linked together with the - * help of the .next_swap member. - * - * The swap map is created during suspend. The swap map pages are - * allocated and populated one at a time, so we only need one memory - * page to set up the entire structure. - * - * During resume we also only need to use one swap_map_page structure - * at a time. - */ - -#define MAP_PAGE_ENTRIES (PAGE_SIZE / sizeof(sector_t) - 1) - -struct swap_map_page { - sector_t entries[MAP_PAGE_ENTRIES]; - sector_t next_swap; -}; - -/** - * The swap_map_handle structure is used for handling swap in - * a file-alike way - */ - -struct swap_map_handle { - struct swap_map_page *cur; - sector_t cur_swap; - unsigned int k; -}; - static void release_swap_writer(struct swap_map_handle *handle) { if (handle->cur) @@ -276,6 +277,7 @@ static int get_swap_writer(struct swap_map_handle *handle) return -ENOSPC; } handle->k = 0; + handle->first_sector = handle->cur_swap; return 0; } @@ -420,8 +422,6 @@ int swsusp_write(unsigned int flags) } error = get_swap_writer(&handle); if (!error) { - sector_t start = handle.cur_swap; - error = swap_write_page(&handle, header, NULL); if (!error) error = save_image(&handle, &snapshot, @@ -430,7 +430,7 @@ int swsusp_write(unsigned int flags) if (!error) { flush_swap_writer(&handle); printk(KERN_INFO "PM: S"); - error = mark_swapfiles(start, flags); + error = mark_swapfiles(&handle, flags); printk("|\n"); } } -- 1.7.0.2 _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm