• Shenghui Wang's avatar
    bcache: do not mark writeback_running too early · 79b79146
    Shenghui Wang authored
    A fresh backing device is not attached to any cache_set, and
    has no writeback kthread created until first attached to some
    cache_set.
    
    But bch_cached_dev_writeback_init run
    "
    	dc->writeback_running		= true;
    	WARN_ON(test_and_clear_bit(BCACHE_DEV_WB_RUNNING,
    			&dc->disk.flags));
    "
    for any newly formatted backing devices.
    
    For a fresh standalone backing device, we can get something like
    following even if no writeback kthread created:
    ------------------------
    /sys/block/bcache0/bcache# cat writeback_running
    1
    /sys/block/bcache0/bcache# cat writeback_rate_debug
    rate:		512.0k/sec
    dirty:		0.0k
    target:		0.0k
    proportional:	0.0k
    integral:	0.0k
    change:		0.0k/sec
    next io:	-15427384ms
    
    The none ZERO fields are misleading as no alive writeback kthread yet.
    
    Set dc->writeback_running false as no writeback thread created in
    bch_cached_dev_writeback_init().
    
    We have writeback thread created and woken up in bch_cached_dev_writeback
    _start(). Set dc->writeback_running true before bch_writeback_queue()
    called, as a writeback thread will check if dc->writeback_running is true
    before writing back dirty data, and hung if false detected.
    
    After the change, we can get the following output for a fresh standalone
    backing device:
    -----------------------
    /sys/block/bcache0/bcache$ cat writeback_running
    0
    /sys/block/bcache0/bcache# cat writeback_rate_debug
    rate:		0.0k/sec
    dirty:		0.0k
    target:		0.0k
    proportional:	0.0k
    integral:	0.0k
    change:		0.0k/sec
    next io:	0ms
    
    v1 -> v2:
      Set dc->writeback_running before bch_writeback_queue() called,
    Signed-off-by: default avatarShenghui Wang <shhuiw@foxmail.com>
    Signed-off-by: default avatarColy Li <colyli@suse.de>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    79b79146
writeback.c 21.4 KB