• Tejun Heo's avatar
    writeback: fix possible underflow in write bandwidth calculation · c72efb65
    Tejun Heo authored
    From 1ebf33901ecc75d9496862dceb1ef0377980587c Mon Sep 17 00:00:00 2001
    From: Tejun Heo <tj@kernel.org>
    Date: Mon, 23 Mar 2015 00:08:19 -0400
    
    2f800fbd ("writeback: fix dirtied pages accounting on redirty")
    introduced account_page_redirty() which reverts stat updates for a
    redirtied page, making BDI_DIRTIED no longer monotonically increasing.
    
    bdi_update_write_bandwidth() uses the delta in BDI_DIRTIED as the
    basis for bandwidth calculation.  While unlikely, since the above
    patch, the newer value may be lower than the recorded past value and
    underflow the bandwidth calculation leading to a wild result.
    
    Fix it by subtracing min of the old and new values when calculating
    delta.  AFAIK, there hasn't been any report of it happening but the
    resulting erratic behavior would be non-critical and temporary, so
    it's possible that the issue is happening without being reported.  The
    risk of the fix is very low, so tagged for -stable.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Cc: Jens Axboe <axboe@kernel.dk>
    Cc: Jan Kara <jack@suse.cz>
    Cc: Wu Fengguang <fengguang.wu@intel.com>
    Cc: Greg Thelen <gthelen@google.com>
    Fixes: 2f800fbd ("writeback: fix dirtied pages accounting on redirty")
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    c72efb65
page-writeback.c 73.6 KB