From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754956Ab1DPODz (ORCPT ); Sat, 16 Apr 2011 10:03:55 -0400 Received: from mga11.intel.com ([192.55.52.93]:20815 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751722Ab1DPODd (ORCPT ); Sat, 16 Apr 2011 10:03:33 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.64,223,1301900400"; d="scan'208";a="910491960" Message-Id: <20110416134333.176703613@intel.com> User-Agent: quilt/0.48-1 Date: Sat, 16 Apr 2011 21:25:52 +0800 From: Wu Fengguang To: Andrew Morton CC: Jan Kara , Peter Zijlstra , Wu Fengguang CC: Christoph Hellwig CC: Trond Myklebust CC: Dave Chinner CC: "Theodore Ts'o" CC: Chris Mason CC: Mel Gorman CC: Rik van Riel CC: KOSAKI Motohiro CC: Greg Thelen CC: Minchan Kim CC: Vivek Goyal CC: Andrea Righi CC: Balbir Singh Cc: linux-mm Cc: Cc: LKML Subject: [PATCH 06/12] writeback: enforce 1/4 gap between the dirty/background thresholds References: <20110416132546.765212221@intel.com> Content-Disposition: inline; filename=writeback-fix-oversize-background-thresh.patch Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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.. The other solution is to return -EIO when setting a too large background threshold or a too small dirty threshold. However that could possibly break some disordered usage scenario, eg. echo 10 > /proc/sys/vm/dirty_ratio echo 5 > /proc/sys/vm/dirty_background_ratio The first echo will fail because the background ratio is still 10. Such order dependent behavior seems disgusting for end users. CC: Peter Zijlstra Signed-off-by: Wu Fengguang --- mm/page-writeback.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) --- linux-next.orig/mm/page-writeback.c 2011-04-13 17:18:13.000000000 +0800 +++ linux-next/mm/page-writeback.c 2011-04-13 17:18:13.000000000 +0800 @@ -422,8 +422,14 @@ 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 + * below or at the entrance of the soft dirty throttle scope. + */ + if (background > dirty - dirty / DIRTY_FULL_SCOPE) + background = dirty - dirty / DIRTY_FULL_SCOPE; + tsk = current; if (tsk->flags & PF_LESS_THROTTLE || rt_task(tsk)) { background += background / 4;