• Shenghui Wang's avatar
    bcache: add comment for cache_set->fill_iter · d2f96f48
    Shenghui Wang authored
    We have the following define for btree iterator:
    	struct btree_iter {
    		size_t size, used;
    	#ifdef CONFIG_BCACHE_DEBUG
    		struct btree_keys *b;
    	#endif
    		struct btree_iter_set {
    			struct bkey *k, *end;
    		} data[MAX_BSETS];
    	};
    
    We can see that the length of data[] field is static MAX_BSETS, which is
    defined as 4 currently.
    
    But a btree node on disk could have too many bsets for an iterator to fit
    on the stack - maybe far more that MAX_BSETS. Have to dynamically allocate
    space to host more btree_iter_sets.
    
    bch_cache_set_alloc() will make sure the pool cache_set->fill_iter can
    allocate an iterator equipped with enough room that can host
    	(sb.bucket_size / sb.block_size)
    btree_iter_sets, which is more than static MAX_BSETS.
    
    bch_btree_node_read_done() will use that pool to allocate one iterator, to
    host many bsets in one btree node.
    
    Add more comment around cache_set->fill_iter to make code less confusing.
    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>
    d2f96f48
btree.c 58.9 KB