summaryrefslogtreecommitdiff
path: root/c_src
diff options
context:
space:
mode:
authorAngelo Bulfone <boomshroom@users.noreply.github.com>2025-08-21 21:22:08 -0700
committerKent Overstreet <kent.overstreet@linux.dev>2025-08-27 18:47:54 -0400
commit4b97a99fa263096297816f64e45cac85d4fa8011 (patch)
treebda728fc64bd118bddb44ca704c11be093db177f /c_src
parent9d90c968b1ee481b0f10b1fa64565f73046eabbc (diff)
Allow block sizes smaller than backing medium
Diffstat (limited to 'c_src')
-rw-r--r--c_src/libbcachefs.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/c_src/libbcachefs.c b/c_src/libbcachefs.c
index a7fc572a..ed84be1b 100644
--- a/c_src/libbcachefs.c
+++ b/c_src/libbcachefs.c
@@ -201,18 +201,20 @@ struct bch_sb *bch2_format(struct bch_opt_strs fs_opt_strs,
dev_opts_list devs)
{
struct bch_sb_handle sb = { NULL };
- unsigned max_dev_block_size = 0;
-
- darray_for_each(devs, i)
- max_dev_block_size = max(max_dev_block_size, get_blocksize(i->bdev->bd_fd));
/* calculate block size: */
- if (!opt_defined(fs_opts, block_size))
+ if (!opt_defined(fs_opts, block_size)) {
+ unsigned max_dev_block_size = 0;
+
+ darray_for_each(devs, i)
+ max_dev_block_size = max(max_dev_block_size, get_blocksize(i->bdev->bd_fd));
+
opt_set(fs_opts, block_size, max_dev_block_size);
+ }
- if (fs_opts.block_size < max_dev_block_size)
- die("blocksize too small: %u, must be greater than device blocksize %u",
- fs_opts.block_size, max_dev_block_size);
+ if (fs_opts.block_size < 512)
+ die("blocksize too small: %u, must be greater than one sector (512 bytes)",
+ fs_opts.block_size);
/* get device size, if it wasn't specified: */
darray_for_each(devs, i)