• Coly Li's avatar
    bcache: at least try to shrink 1 node in bch_mca_scan() · 9fcc34b1
    Coly Li authored
    In bch_mca_scan(), the number of shrinking btree node is calculated
    by code like this,
    	unsigned long nr = sc->nr_to_scan;
    
            nr /= c->btree_pages;
            nr = min_t(unsigned long, nr, mca_can_free(c));
    variable sc->nr_to_scan is number of objects (here is bcache B+tree
    nodes' number) to shrink, and pointer variable sc is sent from memory
    management code as parametr of a callback.
    
    If sc->nr_to_scan is smaller than c->btree_pages, after the above
    calculation, variable 'nr' will be 0 and nothing will be shrunk. It is
    frequeently observed that only 1 or 2 is set to sc->nr_to_scan and make
    nr to be zero. Then bch_mca_scan() will do nothing more then acquiring
    and releasing mutex c->bucket_lock.
    
    This patch checkes whether nr is 0 after the above calculation, if 0
    is the result then set 1 to variable 'n'. Then at least bch_mca_scan()
    will try to shrink a single B+tree node.
    Signed-off-by: default avatarColy Li <colyli@suse.de>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    9fcc34b1
btree.c 61.2 KB