From 38b8d01c4cf823d9804451eff5ec811c17b03408 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Tue, 16 Jan 2024 22:45:53 -0500 Subject: Update bcachefs sources to 481b5f343248 bcachefs: Better error messages for missing inodes in fsck Signed-off-by: Kent Overstreet --- c_src/cmd_dump.c | 7 ++++--- c_src/cmd_format.c | 2 +- c_src/cmd_fs.c | 12 ++++++++---- c_src/cmd_migrate.c | 9 +++++++-- c_src/libbcachefs.c | 3 ++- c_src/libbcachefs.h | 1 + c_src/tools-util.c | 5 +++-- 7 files changed, 26 insertions(+), 13 deletions(-) (limited to 'c_src') diff --git a/c_src/cmd_dump.c b/c_src/cmd_dump.c index 51cc876b..0ffaf98d 100644 --- a/c_src/cmd_dump.c +++ b/c_src/cmd_dump.c @@ -10,6 +10,7 @@ #include "libbcachefs/bcachefs.h" #include "libbcachefs/btree_cache.h" +#include "libbcachefs/btree_io.h" #include "libbcachefs/btree_iter.h" #include "libbcachefs/error.h" #include "libbcachefs/extents.h" @@ -76,7 +77,7 @@ static void dump_one_device(struct bch_fs *c, struct bch_dev *ca, int fd, if (ptr->dev == ca->dev_idx) range_add(&data, ptr->offset << 9, - btree_bytes(c)); + btree_ptr_sectors_written(&b->key)); } } @@ -91,7 +92,7 @@ static void dump_one_device(struct bch_fs *c, struct bch_dev *ca, int fd, if (ptr->dev == ca->dev_idx) range_add(&data, ptr->offset << 9, - btree_bytes(c)); + btree_ptr_sectors_written(&b->key)); } bch2_trans_iter_exit(trans, &iter); @@ -99,7 +100,7 @@ static void dump_one_device(struct bch_fs *c, struct bch_dev *ca, int fd, } qcow2_write_image(ca->disk_sb.bdev->bd_fd, fd, &data, - max_t(unsigned, btree_bytes(c) / 8, block_bytes(c))); + max_t(unsigned, c->opts.btree_node_size / 8, block_bytes(c))); darray_exit(&data); } diff --git a/c_src/cmd_format.c b/c_src/cmd_format.c index 45c44e32..6b77763e 100644 --- a/c_src/cmd_format.c +++ b/c_src/cmd_format.c @@ -188,7 +188,7 @@ int cmd_format(int argc, char *argv[]) case O_data_allowed: dev_opts.data_allowed = read_flag_list_or_die(optarg, - bch2_data_types, "data type"); + __bch2_data_types, "data type"); unconsumed_dev_option = true; break; case O_durability: diff --git a/c_src/cmd_fs.c b/c_src/cmd_fs.c index 67c38af6..1a5d144b 100644 --- a/c_src/cmd_fs.c +++ b/c_src/cmd_fs.c @@ -5,8 +5,10 @@ #include #include "linux/sort.h" +#include "linux/rcupdate.h" #include "libbcachefs/bcachefs_ioctl.h" +#include "libbcachefs/buckets.h" #include "libbcachefs/darray.h" #include "libbcachefs/opts.h" #include "libbcachefs/super-io.h" @@ -15,11 +17,12 @@ #include "libbcachefs.h" static void __dev_usage_type_to_text(struct printbuf *out, - const char *type, + enum bch_data_type type, unsigned bucket_size, u64 buckets, u64 sectors, u64 frag) { - prt_printf(out, "%s:", type); + bch2_prt_data_type(out, type); + prt_char(out, ':'); prt_tab(out); prt_units_u64(out, sectors << 9); @@ -51,7 +54,7 @@ static void dev_usage_type_to_text(struct printbuf *out, sectors = u->d[type].sectors; } - __dev_usage_type_to_text(out, bch2_data_types[type], + __dev_usage_type_to_text(out, type, u->bucket_size, u->d[type].buckets, sectors, @@ -153,7 +156,8 @@ static void replicas_usage_to_text(struct printbuf *out, *d++ = ']'; *d++ = '\0'; - prt_printf(out, "%s: ", bch2_data_types[r->r.data_type]); + bch2_prt_data_type(out, r->r.data_type); + prt_char(out, ':'); prt_tab(out); prt_printf(out, "%u/%u ", r->r.nr_required, r->r.nr_devs); diff --git a/c_src/cmd_migrate.c b/c_src/cmd_migrate.c index ea32e4ee..1c7cc929 100644 --- a/c_src/cmd_migrate.c +++ b/c_src/cmd_migrate.c @@ -676,7 +676,12 @@ static int migrate_fs(const char *fs_path, struct dev_opts dev = dev_opts_default(); dev.path = dev_t_to_path(stat.st_dev); - dev.bdev = blkdev_get_by_path(dev.path, BLK_OPEN_READ|BLK_OPEN_WRITE, &dev, NULL); + dev.handle = bdev_open_by_path(dev.path, BLK_OPEN_READ|BLK_OPEN_WRITE, &dev, NULL); + + int ret = PTR_ERR_OR_ZERO(dev.handle); + if (ret < 0) + die("Error opening device to format %s: %s", dev.path, strerror(-ret)); + dev.bdev = dev.handle->bdev; opt_set(fs_opts, block_size, get_blocksize(dev.bdev->bd_fd)); @@ -722,7 +727,7 @@ static int migrate_fs(const char *fs_path, mark_unreserved_space(c, extents); - int ret = bch2_fs_start(c); + ret = bch2_fs_start(c); if (ret) die("Error starting new filesystem: %s", bch2_err_str(ret)); diff --git a/c_src/libbcachefs.c b/c_src/libbcachefs.c index ef4cc718..703a0eca 100644 --- a/c_src/libbcachefs.c +++ b/c_src/libbcachefs.c @@ -20,6 +20,7 @@ #include "crypto.h" #include "libbcachefs/bcachefs_format.h" #include "libbcachefs/btree_cache.h" +#include "libbcachefs/buckets.h" #include "libbcachefs/checksum.h" #include "libbcachefs/disk_groups.h" #include "libbcachefs/journal_seq_blacklist.h" @@ -531,7 +532,7 @@ int bchu_data(struct bchfs_handle fs, struct bch_ioctl_data cmd) e.p.sectors_total ? e.p.sectors_done * 100 / e.p.sectors_total : 0, - bch2_data_types[e.p.data_type]); + bch2_data_type_str(e.p.data_type)); switch (e.p.data_type) { case BCH_DATA_btree: diff --git a/c_src/libbcachefs.h b/c_src/libbcachefs.h index b189a208..739783f0 100644 --- a/c_src/libbcachefs.h +++ b/c_src/libbcachefs.h @@ -52,6 +52,7 @@ static inline struct format_opts format_opts_default() } struct dev_opts { + struct bdev_handle *handle; struct block_device *bdev; char *path; u64 size; /* bytes*/ diff --git a/c_src/tools-util.c b/c_src/tools-util.c index a1bcd8eb..c0b6852a 100644 --- a/c_src/tools-util.c +++ b/c_src/tools-util.c @@ -189,12 +189,13 @@ int open_for_format(struct dev_opts *dev, bool force) const char *fs_type = NULL, *fs_label = NULL; size_t fs_type_len, fs_label_len; - dev->bdev = blkdev_get_by_path(dev->path, + dev->handle = bdev_open_by_path(dev->path, BLK_OPEN_READ|BLK_OPEN_WRITE|BLK_OPEN_EXCL|BLK_OPEN_BUFFERED, dev, NULL); - int ret = PTR_ERR_OR_ZERO(dev->bdev); + int ret = PTR_ERR_OR_ZERO(dev->handle); if (ret < 0) die("Error opening device to format %s: %s", dev->path, strerror(-ret)); + dev->bdev = dev->handle->bdev; if (!(pr = blkid_new_probe())) die("blkid error 1"); -- cgit v1.2.3