diff options
Diffstat (limited to 'libbcache.c')
-rw-r--r-- | libbcache.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/libbcache.c b/libbcache.c index c9c113ae..1278fdfb 100644 --- a/libbcache.c +++ b/libbcache.c @@ -97,8 +97,14 @@ struct bch_sb *bcache_format(struct format_opts opts, die("cannot format %s, too small (%llu sectors, min %llu)", i->path, i->size, min_size(opts.block_size)); + /* Bucket size must be >= block size: */ + i->bucket_size = opts.block_size; + + /* Bucket size must be >= btree node size: */ + i->bucket_size = max(i->bucket_size, opts.btree_node_size); + /* Want a bucket size of at least 128k, if possible: */ - i->bucket_size = max(opts.block_size, 256U); + i->bucket_size = max(i->bucket_size, 256U); if (i->size >= min_size(i->bucket_size)) { unsigned scale = max(1, @@ -120,6 +126,9 @@ struct bch_sb *bcache_format(struct format_opts opts, if (i->bucket_size < opts.block_size) die("Bucket size cannot be smaller than block size"); + if (i->bucket_size < opts.btree_node_size) + die("Bucket size cannot be smaller than btree node size"); + if (i->nbuckets < BCH_MIN_NR_NBUCKETS) die("Not enough buckets: %llu, need %u (bucket size %u)", i->nbuckets, BCH_MIN_NR_NBUCKETS, i->bucket_size); |