From 44aa9dce55b0c35dbdad584c54a72d2525157cc6 Mon Sep 17 00:00:00 2001 From: Wang Shilong Date: Thu, 18 Jul 2013 00:03:40 +0800 Subject: Btrfs-progs: fix wrong arg sb_bytenr for btrfs_scan_fs_devices() For most time, In open_ctree_*(), we use the first superblock (BTRFS_SUPER_INFO_OFFSET). However, for btrfs-convert, we don't, we should pass the correct sb_bytenr to btrfs_scan_fs_devices() rather than always use BTRFS_SUPER_INFO_OFFSET.This patch fix the following regression: mkfs.ext2 btrfs-convert warning, device 1 is missing Check tree block failed, want=2670592, have=0 read block failed check_tree_block Couldn't read chunk root Segmentation fault (core dumped) Signed-off-by: Wang Shilong Signed-off-by: David Sterba Signed-off-by: Chris Mason --- disk-io.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'disk-io.c') diff --git a/disk-io.c b/disk-io.c index 970f38ad..a19b58ab 100644 --- a/disk-io.c +++ b/disk-io.c @@ -909,13 +909,16 @@ void btrfs_cleanup_all_caches(struct btrfs_fs_info *fs_info) } int btrfs_scan_fs_devices(int fd, const char *path, - struct btrfs_fs_devices **fs_devices) + struct btrfs_fs_devices **fs_devices, + u64 sb_bytenr) { u64 total_devs; int ret; + if (!sb_bytenr) + sb_bytenr = BTRFS_SUPER_INFO_OFFSET; ret = btrfs_scan_one_device(fd, path, fs_devices, - &total_devs, BTRFS_SUPER_INFO_OFFSET); + &total_devs, sb_bytenr); if (ret) { fprintf(stderr, "No valid Btrfs found on %s\n", path); return ret; @@ -1001,7 +1004,7 @@ static struct btrfs_fs_info *__open_ctree_fd(int fp, const char *path, if (restore) fs_info->on_restoring = 1; - ret = btrfs_scan_fs_devices(fp, path, &fs_devices); + ret = btrfs_scan_fs_devices(fp, path, &fs_devices, sb_bytenr); if (ret) goto out; -- cgit v1.2.3