Re: [PATCH v3 1/2] bcache: do not mark writeback_running until backing dev attached to cache_set

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11/22/18 8:54 PM, Shenghui Wang wrote:
> 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: Shenghui Wang <shhuiw@xxxxxxxxxxx>

Add to my for-next, thanks.

Coly Li

> ---
>  drivers/md/bcache/writeback.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c
> index 08c3a9f9676c..1696b212ec4e 100644
> --- a/drivers/md/bcache/writeback.c
> +++ b/drivers/md/bcache/writeback.c
> @@ -777,7 +777,7 @@ void bch_cached_dev_writeback_init(struct cached_dev *dc)
>  	bch_keybuf_init(&dc->writeback_keys);
>  
>  	dc->writeback_metadata		= true;
> -	dc->writeback_running		= true;
> +	dc->writeback_running		= false;
>  	dc->writeback_percent		= 10;
>  	dc->writeback_delay		= 30;
>  	atomic_long_set(&dc->writeback_rate.rate, 1024);
> @@ -805,6 +805,7 @@ int bch_cached_dev_writeback_start(struct cached_dev *dc)
>  		cached_dev_put(dc);
>  		return PTR_ERR(dc->writeback_thread);
>  	}
> +	dc->writeback_running = true;
>  
>  	WARN_ON(test_and_set_bit(BCACHE_DEV_WB_RUNNING, &dc->disk.flags));
>  	schedule_delayed_work(&dc->writeback_rate_update,
> 




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux ARM Kernel]     [Linux Filesystem Development]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux