summaryrefslogtreecommitdiff
path: root/libbcache.c
diff options
context:
space:
mode:
Diffstat (limited to 'libbcache.c')
-rw-r--r--libbcache.c11
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);