Cleanup: setting an outstanding error on a mapping was open coded too many times. Factor it out in mapping_set_error(). Signed-off-by: Guillaume Chazarain --- fs/gfs2/glops.c | 5 +---- fs/mpage.c | 16 ++-------------- include/linux/pagemap.h | 10 ++++++++++ mm/page-writeback.c | 7 +------ mm/vmscan.c | 8 ++------ 5 files changed, 16 insertions(+), 30 deletions(-) diff -r 3859b1144d3a fs/gfs2/glops.c --- a/fs/gfs2/glops.c Sun Dec 24 05:00:03 2006 +0000 +++ b/fs/gfs2/glops.c Fri Dec 29 22:13:21 2006 +0100 @@ -213,10 +213,7 @@ static void inode_go_sync(struct gfs2_gl if (ip) { struct address_space *mapping = ip->i_inode.i_mapping; int error = filemap_fdatawait(mapping); - if (error == -ENOSPC) - set_bit(AS_ENOSPC, &mapping->flags); - else if (error) - set_bit(AS_EIO, &mapping->flags); + mapping_set_error(mapping, error); } clear_bit(GLF_DIRTY, &gl->gl_flags); gfs2_ail_empty_gl(gl); diff -r 3859b1144d3a fs/mpage.c --- a/fs/mpage.c Sun Dec 24 05:00:03 2006 +0000 +++ b/fs/mpage.c Fri Dec 29 22:12:09 2006 +0100 @@ -663,12 +663,7 @@ confused: /* * The caller has a ref on the inode, so *mapping is stable */ - if (*ret) { - if (*ret == -ENOSPC) - set_bit(AS_ENOSPC, &mapping->flags); - else - set_bit(AS_EIO, &mapping->flags); - } + mapping_set_error(mapping, *ret); out: return bio; } @@ -776,14 +771,7 @@ retry: if (writepage) { ret = (*writepage)(page, wbc); - if (ret) { - if (ret == -ENOSPC) - set_bit(AS_ENOSPC, - &mapping->flags); - else - set_bit(AS_EIO, - &mapping->flags); - } + mapping_set_error(mapping, ret); } else { bio = __mpage_writepage(bio, page, get_block, &last_block_in_bio, &ret, wbc, diff -r 3859b1144d3a include/linux/pagemap.h --- a/include/linux/pagemap.h Sun Dec 24 05:00:03 2006 +0000 +++ b/include/linux/pagemap.h Fri Dec 29 22:09:01 2006 +0100 @@ -19,6 +19,16 @@ #define AS_EIO (__GFP_BITS_SHIFT + 0) /* IO error on async write */ #define AS_ENOSPC (__GFP_BITS_SHIFT + 1) /* ENOSPC on async write */ +static inline void mapping_set_error(struct address_space * mapping, int error) +{ + if (error) { + if (error == -ENOSPC) + set_bit(AS_ENOSPC, &mapping->flags); + else + set_bit(AS_EIO, &mapping->flags); + } +} + static inline gfp_t mapping_gfp_mask(struct address_space * mapping) { return (__force gfp_t)mapping->flags & __GFP_BITS_MASK; diff -r 3859b1144d3a mm/page-writeback.c --- a/mm/page-writeback.c Sun Dec 24 05:00:03 2006 +0000 +++ b/mm/page-writeback.c Fri Dec 29 22:19:30 2006 +0100 @@ -651,12 +651,7 @@ retry: } ret = (*writepage)(page, wbc); - if (ret) { - if (ret == -ENOSPC) - set_bit(AS_ENOSPC, &mapping->flags); - else - set_bit(AS_EIO, &mapping->flags); - } + mapping_set_error(mapping, ret); if (unlikely(ret == AOP_WRITEPAGE_ACTIVATE)) unlock_page(page); diff -r 3859b1144d3a mm/vmscan.c --- a/mm/vmscan.c Sun Dec 24 05:00:03 2006 +0000 +++ b/mm/vmscan.c Fri Dec 29 22:14:33 2006 +0100 @@ -284,12 +284,8 @@ static void handle_write_error(struct ad struct page *page, int error) { lock_page(page); - if (page_mapping(page) == mapping) { - if (error == -ENOSPC) - set_bit(AS_ENOSPC, &mapping->flags); - else - set_bit(AS_EIO, &mapping->flags); - } + if (page_mapping(page) == mapping) + mapping_set_error(mapping, error); unlock_page(page); }