When shmem returns AOP_WRITEPAGE_ACTIVATE, the inode pages cannot be synced in the near future. So write_cache_pages shall stop writting this inode, and shmem shall increase pages_skipped to instruct VFS not to busy retry. CC: Hugh Dickins <hugh.dickins@xxxxxxxxxxxxx> Signed-off-by: Wu Fengguang <fengguang.wu@xxxxxxxxx> --- --- mm/page-writeback.c | 23 +++++++++++------------ mm/shmem.c | 1 + 2 files changed, 12 insertions(+), 12 deletions(-) --- linux.orig/mm/page-writeback.c 2009-10-06 23:39:28.000000000 +0800 +++ linux/mm/page-writeback.c 2009-10-06 23:39:29.000000000 +0800 @@ -851,19 +851,18 @@ continue_unlock: if (ret == AOP_WRITEPAGE_ACTIVATE) { unlock_page(page); ret = 0; - } else { - /* - * done_index is set past this page, - * so media errors will not choke - * background writeout for the entire - * file. This has consequences for - * range_cyclic semantics (ie. it may - * not be suitable for data integrity - * writeout). - */ - done = 1; - break; } + /* + * done_index is set past this page, + * so media errors will not choke + * background writeout for the entire + * file. This has consequences for + * range_cyclic semantics (ie. it may + * not be suitable for data integrity + * writeout). + */ + done = 1; + break; } if (nr_to_write > 0) { --- linux.orig/mm/shmem.c 2009-10-06 23:37:40.000000000 +0800 +++ linux/mm/shmem.c 2009-10-06 23:39:29.000000000 +0800 @@ -1103,6 +1103,7 @@ unlock: */ swapcache_free(swap, NULL); redirty: + wbc->pages_skipped++; set_page_dirty(page); if (wbc->for_reclaim) return AOP_WRITEPAGE_ACTIVATE; /* Return with page locked */ -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html