]> err.no Git - linux-2.6/blobdiff - kernel/power/swap.c
Merge master.kernel.org:/pub/scm/linux/kernel/git/lethal/sh-2.6
[linux-2.6] / kernel / power / swap.c
index 8309d20b2563d2783395b91f45cad020f97329f0..1a3b0dd2c3fcc18b2db25fc7472560cb67edfb7e 100644 (file)
@@ -331,8 +331,7 @@ static int enough_swap(unsigned int nr_pages)
        unsigned int free_swap = count_swap_pages(root_swap, 1);
 
        pr_debug("swsusp: free swap pages: %u\n", free_swap);
-       return free_swap > (nr_pages + PAGES_FOR_IO +
-               (nr_pages + PBES_PER_PAGE - 1) / PBES_PER_PAGE);
+       return free_swap > nr_pages + PAGES_FOR_IO;
 }
 
 /**
@@ -426,7 +425,8 @@ static int submit(int rw, pgoff_t page_off, struct page *page,
                        bio_set_pages_dirty(bio);
                bio_put(bio);
        } else {
-               get_page(page);
+               if (rw == READ)
+                       get_page(page); /* These pages are freed later */
                bio->bi_private = *bio_chain;
                *bio_chain = bio;
                submit_bio(rw | (1 << BIO_RW_SYNC), bio);
@@ -547,6 +547,7 @@ static int load_image(struct swap_map_handle *handle,
                error = err2;
        if (!error) {
                printk("\b\b\b\bdone\n");
+               snapshot_free_unused_memory(snapshot);
                if (!snapshot_image_loaded(snapshot))
                        error = -ENODATA;
        }