diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2025-09-03 16:02:11 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2025-09-06 01:43:44 -0400 |
commit | 31c7a7398a28b91cb1721c2721eaf577ed187bf2 (patch) | |
tree | ee03706f989ed85d783b86d63ea9156111acbc72 /c_src | |
parent | e65dd86e419d96aaa616dcb508d3564bd5721ef6 (diff) |
format: Do a 'udevadm trigger' after formatting
This causes the new filesystem UUID to be picked up; without this, mount
can fail if it's a multidevice filesystem.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'c_src')
-rw-r--r-- | c_src/cmd_super.c | 8 | ||||
-rw-r--r-- | c_src/libbcachefs.c | 12 |
2 files changed, 19 insertions, 1 deletions
diff --git a/c_src/cmd_super.c b/c_src/cmd_super.c index 18e4df80..1f93ed25 100644 --- a/c_src/cmd_super.c +++ b/c_src/cmd_super.c @@ -480,6 +480,14 @@ int cmd_recover_super(int argc, char *argv[]) if (args.yes || ask_yn()) bch2_super_write(dev_fd, sb); + /* + * Ensure that 'bcachefs mount' sees the newly formatted devices when + * scanning by UUID in the udev database: + */ + CLASS(printbuf, udevadm_cmd)(); + prt_printf(&udevadm_cmd, "udevadm trigger --settle %s", dev_path); + system(udevadm_cmd.buf); + if (args.src_device) printf("Recovered device will no longer have a journal, please run fsck\n"); diff --git a/c_src/libbcachefs.c b/c_src/libbcachefs.c index ed84be1b..656c9132 100644 --- a/c_src/libbcachefs.c +++ b/c_src/libbcachefs.c @@ -205,7 +205,7 @@ struct bch_sb *bch2_format(struct bch_opt_strs fs_opt_strs, /* calculate 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)); @@ -357,6 +357,16 @@ struct bch_sb *bch2_format(struct bch_opt_strs fs_opt_strs, xclose(i->bdev->bd_fd); } + /* + * Ensure that 'bcachefs mount' sees the newly formatted devices when + * scanning by UUID in the udev database: + */ + CLASS(printbuf, udevadm_cmd)(); + prt_str(&udevadm_cmd, "udevadm trigger --settle"); + darray_for_each(devs, i) + prt_printf(&udevadm_cmd, " %s", i->path); + system(udevadm_cmd.buf); + return sb.sb; } |