From 323bfcc08a07a7d0a41317e5628bb10b92038db3 Mon Sep 17 00:00:00 2001 From: Peter Zijlstra Date: Mon, 25 Sep 2006 23:31:26 -0700 Subject: [PATCH] --- yaml --- r: 35599 b: refs/heads/master c: 6ddab3b9ebebc88bfdd8107c64f12d7e4480c559 h: refs/heads/master i: 35597: 71418219c67e84de76151058de7c7c7be9f66059 35595: 3edfe312d7d34d1817f11fb469326f10ac858dd3 35591: 28e83b38447b629ab726569505a2647f0fccfcd2 35583: f5b7725a8b4d523f83c3f4939f62431c97ad7f33 v: v3 --- [refs] | 2 +- trunk/mm/page_io.c | 21 ++++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 3b4b0585d9b1..7c6962f478ed 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ca5f9703dffa012cc46166e6206c5a992910e041 +refs/heads/master: 6ddab3b9ebebc88bfdd8107c64f12d7e4480c559 diff --git a/trunk/mm/page_io.c b/trunk/mm/page_io.c index 88029948d00a..d2f0a5783370 100644 --- a/trunk/mm/page_io.c +++ b/trunk/mm/page_io.c @@ -52,8 +52,23 @@ static int end_swap_bio_write(struct bio *bio, unsigned int bytes_done, int err) if (bio->bi_size) return 1; - if (!uptodate) + if (!uptodate) { SetPageError(page); + /* + * We failed to write the page out to swap-space. + * Re-dirty the page in order to avoid it being reclaimed. + * Also print a dire warning that things will go BAD (tm) + * very quickly. + * + * Also clear PG_reclaim to avoid rotate_reclaimable_page() + */ + set_page_dirty(page); + printk(KERN_ALERT "Write-error on swap-device (%u:%u:%Lu)\n", + imajor(bio->bi_bdev->bd_inode), + iminor(bio->bi_bdev->bd_inode), + (unsigned long long)bio->bi_sector); + ClearPageReclaim(page); + } end_page_writeback(page); bio_put(bio); return 0; @@ -70,6 +85,10 @@ static int end_swap_bio_read(struct bio *bio, unsigned int bytes_done, int err) if (!uptodate) { SetPageError(page); ClearPageUptodate(page); + printk(KERN_ALERT "Read-error on swap-device (%u:%u:%Lu)\n", + imajor(bio->bi_bdev->bd_inode), + iminor(bio->bi_bdev->bd_inode), + (unsigned long long)bio->bi_sector); } else { SetPageUptodate(page); }