Re: [PATCH AUTOSEL 4.14 32/58] bcache: at least try to shrink 1 node in bch_mca_scan()

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

 



On 2019/12/12 11:48 上午, John Stoffel wrote:
>>>>>> "Sasha" == Sasha Levin <sashal@xxxxxxxxxx> writes:
> 
> Sasha> From: Coly Li <colyli@xxxxxxx>
> Sasha> [ Upstream commit 9fcc34b1a6dd4b8e5337e2b6ef45e428897eca6b ]
> 
> Sasha> In bch_mca_scan(), the number of shrinking btree node is calculated
> Sasha> by code like this,
> Sasha> 	unsigned long nr = sc->nr_to_scan;
> 
> Sasha>         nr /= c->btree_pages;
> Sasha>         nr = min_t(unsigned long, nr, mca_can_free(c));
> Sasha> variable sc->nr_to_scan is number of objects (here is bcache B+tree
> Sasha> nodes' number) to shrink, and pointer variable sc is sent from memory
> Sasha> management code as parametr of a callback.
> 
> Sasha> If sc->nr_to_scan is smaller than c->btree_pages, after the above
> Sasha> calculation, variable 'nr' will be 0 and nothing will be shrunk. It is
> Sasha> frequeently observed that only 1 or 2 is set to sc->nr_to_scan and make
> Sasha> nr to be zero. Then bch_mca_scan() will do nothing more then acquiring
> Sasha> and releasing mutex c->bucket_lock.
> 
> Sasha> This patch checkes whether nr is 0 after the above calculation, if 0
> Sasha> is the result then set 1 to variable 'n'. Then at least bch_mca_scan()
> Sasha> will try to shrink a single B+tree node.
> 
> Sasha>  	nr /= c->btree_pages;
> Sasha> +	if (nr == 0)
> Sasha> +		nr = 1;
> 
> 
> Wouldn't it be even more clear with:
> 
>    nr /= c->bree_pages || 1;
> 
> instead?

No, it is not more clear. At least to me, I may confuse does it mean,
- nr = (nr / c->btree_pages) || 1;
- or nr = nr / (c->btree_pages || 1)

If I don't check C manual, I am not able to tell the correct calculate
at first time.

Thanks.

-- 

Coly Li



[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