[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 <fs@ercist.iscas.ac.cn> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
d304506405
commit
854715be73
1 changed files with 4 additions and 1 deletions
|
@ -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)
|
if (--bvec >= bio->bi_io_vec)
|
||||||
prefetchw(&bvec->bv_page->flags);
|
prefetchw(&bvec->bv_page->flags);
|
||||||
|
|
||||||
if (!uptodate)
|
if (!uptodate){
|
||||||
SetPageError(page);
|
SetPageError(page);
|
||||||
|
if (page->mapping)
|
||||||
|
set_bit(AS_EIO, &page->mapping->flags);
|
||||||
|
}
|
||||||
end_page_writeback(page);
|
end_page_writeback(page);
|
||||||
} while (bvec >= bio->bi_io_vec);
|
} while (bvec >= bio->bi_io_vec);
|
||||||
bio_put(bio);
|
bio_put(bio);
|
||||||
|
|
Loading…
Add table
Reference in a new issue