From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pavel Emelyanov Subject: [PATCH 10/10] mm: Account for WRITEBACK_TEMP in balance_dirty_pages Date: Tue, 03 Jul 2012 19:57:31 +0400 Message-ID: <4FF3166B.5090800@parallels.com> References: <4FF3156E.8030109@parallels.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: James Bottomley , Kirill Korotaev To: fuse-devel@lists.sourceforge.net, Miklos Szeredi , Alexander Viro , linux-fsdevel Return-path: Received: from mailhub.sw.ru ([195.214.232.25]:37954 "EHLO relay.sw.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756765Ab2GCP5t (ORCPT ); Tue, 3 Jul 2012 11:57:49 -0400 In-Reply-To: <4FF3156E.8030109@parallels.com> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: Make balance_dirty_pages start the throttling when the WRITEBACK_TEMP counter is hight ehough. This prevents us from having too many dirty pages on fuse, thus giving the userspace part of it a chance to write stuff properly. Note, that the existing balance logic is per-bdi, i.e. if the fuse user task gets stuck in the function this means, that it either writes to the mountpoint it serves (but it can deadlock even without the writeback) or it is wrting to some _other_ dirty bdi and in the latter case someone else will free the memory for it. Signed-off-by: Pavel Emelyanov --- mm/page-writeback.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/mm/page-writeback.c b/mm/page-writeback.c index 93d8d2f..7cb54db 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c @@ -1192,7 +1192,8 @@ static void balance_dirty_pages(struct address_space *mapping, */ nr_reclaimable = global_page_state(NR_FILE_DIRTY) + global_page_state(NR_UNSTABLE_NFS); - nr_dirty = nr_reclaimable + global_page_state(NR_WRITEBACK); + nr_dirty = nr_reclaimable + global_page_state(NR_WRITEBACK) + + global_page_state(NR_WRITEBACK_TEMP); global_dirty_limits(&background_thresh, &dirty_thresh); -- 1.5.5.6