- Robustify the logic a bit. At present if writepage() returns an error which is not -EIO or -ENOSPC we lose track of it. So instead, treat all unknown errors as -EIO. fs/mpage.c | 12 ++++++------ mm/vmscan.c | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff -puN fs/mpage.c~awe-use-gfp_flags-fixes fs/mpage.c --- 25/fs/mpage.c~awe-use-gfp_flags-fixes 2003-08-02 03:40:29.000000000 -0700 +++ 25-akpm/fs/mpage.c 2003-08-02 03:40:29.000000000 -0700 @@ -566,10 +566,10 @@ confused: /* * The caller has a ref on the inode, so *mapping is stable */ - if (*ret == -EIO) - set_bit(AS_EIO, &mapping->flags); - else if (*ret == -ENOSPC) + if (*ret == -ENOSPC) set_bit(AS_ENOSPC, &mapping->flags); + else + set_bit(AS_EIO, &mapping->flags); out: return bio; } @@ -671,10 +671,10 @@ mpage_writepages(struct address_space *m test_clear_page_dirty(page)) { if (writepage) { ret = (*writepage)(page, wbc); - if (ret == -EIO) - set_bit(AS_EIO, &mapping->flags); - else if (ret == -ENOSPC) + if (ret == -ENOSPC) set_bit(AS_ENOSPC, &mapping->flags); + else + set_bit(AS_EIO, &mapping->flags); } else { bio = mpage_writepage(bio, page, get_block, &last_block_in_bio, &ret, wbc); diff -puN mm/vmscan.c~awe-use-gfp_flags-fixes mm/vmscan.c --- 25/mm/vmscan.c~awe-use-gfp_flags-fixes 2003-08-02 03:40:29.000000000 -0700 +++ 25-akpm/mm/vmscan.c 2003-08-02 03:40:29.000000000 -0700 @@ -252,10 +252,10 @@ static void handle_write_error(struct ad { lock_page(page); if (page->mapping == mapping) { - if (error == -EIO) - set_bit(AS_EIO, &mapping->flags); - else if (error == -ENOSPC) + if (error == -ENOSPC) set_bit(AS_ENOSPC, &mapping->flags); + else + set_bit(AS_EIO, &mapping->flags); } unlock_page(page); } _