From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933983Ab0KQEKl (ORCPT ); Tue, 16 Nov 2010 23:10:41 -0500 Received: from mga01.intel.com ([192.55.52.88]:31238 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1759596Ab0KQEIK (ORCPT ); Tue, 16 Nov 2010 23:08:10 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.59,209,1288594800"; d="scan'208";a="627554507" Message-Id: <20101117035906.587564574@intel.com> User-Agent: quilt/0.48-1 Date: Wed, 17 Nov 2010 11:58:31 +0800 From: Wu Fengguang To: Andrew Morton CC: "Theodore Ts'o" , Wu Fengguang CC: Dave Chinner CC: Jan Kara CC: Peter Zijlstra CC: Mel Gorman CC: Rik van Riel CC: KOSAKI Motohiro CC: Chris Mason CC: Christoph Hellwig Cc: linux-mm Cc: Cc: LKML Subject: [PATCH 10/13] writeback: make reasonable gap between the dirty/background thresholds Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Andrew, References: <20101117035821.000579293@intel.com> Content-Disposition: inline; filename=writeback-fix-oversize-background-thresh.patch The change is virtually a no-op for the majority users that use the default 10/20 background/dirty ratios. For others don't know why they are setting background ratio close enough to dirty ratio. Someone must set background ratio equal to dirty ratio, but no one seems to notice or complain that it's then silently halved under the hood.. Signed-off-by: Wu Fengguang --- mm/page-writeback.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) --- linux-next.orig/mm/page-writeback.c 2010-11-15 13:12:50.000000000 +0800 +++ linux-next/mm/page-writeback.c 2010-11-15 13:13:42.000000000 +0800 @@ -403,8 +403,15 @@ void global_dirty_limits(unsigned long * else background = (dirty_background_ratio * available_memory) / 100; - if (background >= dirty) - background = dirty / 2; + /* + * Ensure at least 1/4 gap between background and dirty thresholds, so + * that when dirty throttling starts at (background + dirty)/2, it's at + * the entrance of bdi soft throttle threshold, so as to avoid being + * hard throttled. + */ + if (background > dirty - dirty * 2 / BDI_SOFT_DIRTY_LIMIT) + background = dirty - dirty * 2 / BDI_SOFT_DIRTY_LIMIT; + tsk = current; if (tsk->flags & PF_LESS_THROTTLE || rt_task(tsk)) { background += background / 4;