diff options
Diffstat (limited to 'mm/page_io.c')
| -rw-r--r-- | mm/page_io.c | 12 | 
1 files changed, 12 insertions, 0 deletions
| diff --git a/mm/page_io.c b/mm/page_io.c index dc76b4d0611e..34f02923744c 100644 --- a/mm/page_io.c +++ b/mm/page_io.c @@ -18,6 +18,7 @@  #include <linux/bio.h>  #include <linux/swapops.h>  #include <linux/writeback.h> +#include <linux/frontswap.h>  #include <asm/pgtable.h>  static struct bio *get_swap_bio(gfp_t gfp_flags, @@ -98,6 +99,12 @@ int swap_writepage(struct page *page, struct writeback_control *wbc)  		unlock_page(page);  		goto out;  	} +	if (frontswap_store(page) == 0) { +		set_page_writeback(page); +		unlock_page(page); +		end_page_writeback(page); +		goto out; +	}  	bio = get_swap_bio(GFP_NOIO, page, end_swap_bio_write);  	if (bio == NULL) {  		set_page_dirty(page); @@ -122,6 +129,11 @@ int swap_readpage(struct page *page)  	VM_BUG_ON(!PageLocked(page));  	VM_BUG_ON(PageUptodate(page)); +	if (frontswap_load(page) == 0) { +		SetPageUptodate(page); +		unlock_page(page); +		goto out; +	}  	bio = get_swap_bio(GFP_KERNEL, page, end_swap_bio_read);  	if (bio == NULL) {  		unlock_page(page); | 
