bcache: split combined if-condition code into separate ones
Split the combined '||' statements in if() check, to make the code easier for debug. Signed-off-by: Dongbo Cao <cdbdyx@163.com> Signed-off-by: Coly Li <colyli@suse.de> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
8792099f9a
commit
f6027bca9e
@ -2052,6 +2052,8 @@ static int cache_alloc(struct cache *ca)
|
|||||||
size_t free;
|
size_t free;
|
||||||
size_t btree_buckets;
|
size_t btree_buckets;
|
||||||
struct bucket *b;
|
struct bucket *b;
|
||||||
|
int ret = -ENOMEM;
|
||||||
|
const char *err = NULL;
|
||||||
|
|
||||||
__module_get(THIS_MODULE);
|
__module_get(THIS_MODULE);
|
||||||
kobject_init(&ca->kobj, &bch_cache_ktype);
|
kobject_init(&ca->kobj, &bch_cache_ktype);
|
||||||
@ -2070,26 +2072,86 @@ static int cache_alloc(struct cache *ca)
|
|||||||
btree_buckets = ca->sb.njournal_buckets ?: 8;
|
btree_buckets = ca->sb.njournal_buckets ?: 8;
|
||||||
free = roundup_pow_of_two(ca->sb.nbuckets) >> 10;
|
free = roundup_pow_of_two(ca->sb.nbuckets) >> 10;
|
||||||
|
|
||||||
if (!init_fifo(&ca->free[RESERVE_BTREE], btree_buckets, GFP_KERNEL) ||
|
if (!init_fifo(&ca->free[RESERVE_BTREE], btree_buckets,
|
||||||
!init_fifo_exact(&ca->free[RESERVE_PRIO], prio_buckets(ca), GFP_KERNEL) ||
|
GFP_KERNEL)) {
|
||||||
!init_fifo(&ca->free[RESERVE_MOVINGGC], free, GFP_KERNEL) ||
|
err = "ca->free[RESERVE_BTREE] alloc failed";
|
||||||
!init_fifo(&ca->free[RESERVE_NONE], free, GFP_KERNEL) ||
|
goto err_btree_alloc;
|
||||||
!init_fifo(&ca->free_inc, free << 2, GFP_KERNEL) ||
|
}
|
||||||
!init_heap(&ca->heap, free << 3, GFP_KERNEL) ||
|
|
||||||
!(ca->buckets = vzalloc(array_size(sizeof(struct bucket),
|
if (!init_fifo_exact(&ca->free[RESERVE_PRIO], prio_buckets(ca),
|
||||||
ca->sb.nbuckets))) ||
|
GFP_KERNEL)) {
|
||||||
!(ca->prio_buckets = kzalloc(array3_size(sizeof(uint64_t),
|
err = "ca->free[RESERVE_PRIO] alloc failed";
|
||||||
prio_buckets(ca), 2),
|
goto err_prio_alloc;
|
||||||
GFP_KERNEL)) ||
|
}
|
||||||
!(ca->disk_buckets = alloc_bucket_pages(GFP_KERNEL, ca)))
|
|
||||||
return -ENOMEM;
|
if (!init_fifo(&ca->free[RESERVE_MOVINGGC], free, GFP_KERNEL)) {
|
||||||
|
err = "ca->free[RESERVE_MOVINGGC] alloc failed";
|
||||||
|
goto err_movinggc_alloc;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!init_fifo(&ca->free[RESERVE_NONE], free, GFP_KERNEL)) {
|
||||||
|
err = "ca->free[RESERVE_NONE] alloc failed";
|
||||||
|
goto err_none_alloc;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!init_fifo(&ca->free_inc, free << 2, GFP_KERNEL)) {
|
||||||
|
err = "ca->free_inc alloc failed";
|
||||||
|
goto err_free_inc_alloc;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!init_heap(&ca->heap, free << 3, GFP_KERNEL)) {
|
||||||
|
err = "ca->heap alloc failed";
|
||||||
|
goto err_heap_alloc;
|
||||||
|
}
|
||||||
|
|
||||||
|
ca->buckets = vzalloc(array_size(sizeof(struct bucket),
|
||||||
|
ca->sb.nbuckets));
|
||||||
|
if (!ca->buckets) {
|
||||||
|
err = "ca->buckets alloc failed";
|
||||||
|
goto err_buckets_alloc;
|
||||||
|
}
|
||||||
|
|
||||||
|
ca->prio_buckets = kzalloc(array3_size(sizeof(uint64_t),
|
||||||
|
prio_buckets(ca), 2),
|
||||||
|
GFP_KERNEL);
|
||||||
|
if (!ca->prio_buckets) {
|
||||||
|
err = "ca->prio_buckets alloc failed";
|
||||||
|
goto err_prio_buckets_alloc;
|
||||||
|
}
|
||||||
|
|
||||||
|
ca->disk_buckets = alloc_bucket_pages(GFP_KERNEL, ca);
|
||||||
|
if (!ca->disk_buckets) {
|
||||||
|
err = "ca->disk_buckets alloc failed";
|
||||||
|
goto err_disk_buckets_alloc;
|
||||||
|
}
|
||||||
|
|
||||||
ca->prio_last_buckets = ca->prio_buckets + prio_buckets(ca);
|
ca->prio_last_buckets = ca->prio_buckets + prio_buckets(ca);
|
||||||
|
|
||||||
for_each_bucket(b, ca)
|
for_each_bucket(b, ca)
|
||||||
atomic_set(&b->pin, 0);
|
atomic_set(&b->pin, 0);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
err_disk_buckets_alloc:
|
||||||
|
kfree(ca->prio_buckets);
|
||||||
|
err_prio_buckets_alloc:
|
||||||
|
vfree(ca->buckets);
|
||||||
|
err_buckets_alloc:
|
||||||
|
free_heap(&ca->heap);
|
||||||
|
err_heap_alloc:
|
||||||
|
free_fifo(&ca->free_inc);
|
||||||
|
err_free_inc_alloc:
|
||||||
|
free_fifo(&ca->free[RESERVE_NONE]);
|
||||||
|
err_none_alloc:
|
||||||
|
free_fifo(&ca->free[RESERVE_MOVINGGC]);
|
||||||
|
err_movinggc_alloc:
|
||||||
|
free_fifo(&ca->free[RESERVE_PRIO]);
|
||||||
|
err_prio_alloc:
|
||||||
|
free_fifo(&ca->free[RESERVE_BTREE]);
|
||||||
|
err_btree_alloc:
|
||||||
|
module_put(THIS_MODULE);
|
||||||
|
if (err)
|
||||||
|
pr_notice("error %s: %s", ca->cache_dev_name, err);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int register_cache(struct cache_sb *sb, struct page *sb_page,
|
static int register_cache(struct cache_sb *sb, struct page *sb_page,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user