diff options
author | Qu Fuping <fs@ercist.iscas.ac.cn> | 2005-06-04 15:43:29 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-06-04 17:12:59 -0700 |
commit | 854715be73b221596c7127d4042e1120d4539e19 (patch) | |
tree | db0ddc9d2b9db5de1a75df627ca4a0c28600e64a | |
parent | d3045064054a93d303094cfb96d980cc3c82a64c (diff) | |
download | op-kernel-dev-854715be73b221596c7127d4042e1120d4539e19.zip op-kernel-dev-854715be73b221596c7127d4042e1120d4539e19.tar.gz |
[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>
-rw-r--r-- | fs/mpage.c | 5 |
1 files changed, 4 insertions, 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) 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); |