From: Qu Fuping Date: Sat, 4 Jun 2005 22:43:29 +0000 (-0700) Subject: [PATCH] mpage_end_io_write() I/O error handling fix X-Git-Tag: v2.6.12-rc6~6 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=854715be73b221596c7127d4042e1120d4539e19;p=linux-2.6-omap-h63xx.git [PATCH] mpage_end_io_write() I/O error handling fix When fsync() runs wait_on_page_writeback_range() it only inspects pages which are actually under I/O (PAGECACHE_TAG_WRITEBACK). If a page completed I/O prior to wait_on_page_writeback_range() looking at it, it is supposed to have recorded its I/O error state in the address_space. But mpage_mpage_end_io_write() forgot to set the address_space error flag in this case. Signed-off-by: Qu Fuping Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/fs/mpage.c b/fs/mpage.c index b92c0e64aef..bb9aebe9386 100644 --- a/fs/mpage.c +++ b/fs/mpage.c @@ -79,8 +79,11 @@ static int mpage_end_io_write(struct bio *bio, unsigned int bytes_done, int err) if (--bvec >= bio->bi_io_vec) prefetchw(&bvec->bv_page->flags); - if (!uptodate) + if (!uptodate){ SetPageError(page); + if (page->mapping) + set_bit(AS_EIO, &page->mapping->flags); + } end_page_writeback(page); } while (bvec >= bio->bi_io_vec); bio_put(bio);