From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wu Fengguang Subject: [PATCH 29/45] writeback: fix the shmem AOP_WRITEPAGE_ACTIVATE case Date: Wed, 07 Oct 2009 15:38:47 +0800 Message-ID: <20091007074904.870825579@intel.com> References: <20091007073818.318088777@intel.com> Cc: Theodore Tso , Christoph Hellwig , Dave Chinner , Chris Mason , Peter Zijlstra , "Li Shaohua" , "Myklebust Trond" , "jens.axboe@oracle.com" , Jan Kara , Nick Piggin , , Hugh Dickins , Wu Fengguang To: Andrew Morton Return-path: Received: from mga14.intel.com ([143.182.124.37]:35820 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933911AbZJGIBc (ORCPT ); Wed, 7 Oct 2009 04:01:32 -0400 Cc: LKML Content-Disposition: inline; filename=writeback-for-reclaim-pre-fix.patch Sender: linux-fsdevel-owner@vger.kernel.org List-ID: 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 Signed-off-by: Wu Fengguang --- --- 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 */