From 23d7f6d9dc0aa42e30fe9642b4e0876354d2c02e Mon Sep 17 00:00:00 2001 From: Qu Wenruo Date: Thu, 3 Jul 2014 17:36:36 +0800 Subject: btrfs-progs: Allow btrfs_read_dev_super() to read all 3 super for super_recover. Btrfs-progs superblock checksum check is somewhat too restricted for super-recover, since current btrfs-progs will only read the 1st superblock and if you need super-recover the 1st superblock is possibly already damaged. The fix is introducing super_recover parameter for btrfs_read_dev_super() and callers to allow scan backup superblocks if needed. Signed-off-by: Qu Wenruo Signed-off-by: David Sterba --- chunk-recover.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'chunk-recover.c') diff --git a/chunk-recover.c b/chunk-recover.c index b638ada..14c25a7 100644 --- a/chunk-recover.c +++ b/chunk-recover.c @@ -1281,7 +1281,7 @@ open_ctree_with_broken_chunk(struct recover_control *rc) disk_super = fs_info->super_copy; ret = btrfs_read_dev_super(fs_info->fs_devices->latest_bdev, - disk_super, fs_info->super_bytenr); + disk_super, fs_info->super_bytenr, 1); if (ret) { fprintf(stderr, "No valid btrfs found\n"); goto out_devices; @@ -1347,7 +1347,7 @@ static int recover_prepare(struct recover_control *rc, char *path) goto fail_close_fd; } - ret = btrfs_read_dev_super(fd, sb, BTRFS_SUPER_INFO_OFFSET); + ret = btrfs_read_dev_super(fd, sb, BTRFS_SUPER_INFO_OFFSET, 1); if (ret) { fprintf(stderr, "read super block error\n"); goto fail_free_sb; @@ -1366,7 +1366,7 @@ static int recover_prepare(struct recover_control *rc, char *path) goto fail_free_sb; } - ret = btrfs_scan_fs_devices(fd, path, &fs_devices, 0, 1); + ret = btrfs_scan_fs_devices(fd, path, &fs_devices, 0, 1, 1); if (ret) goto fail_free_sb; -- cgit v1.2.1