path: root/volumes.c
diff options
authorQu Wenruo <>2014-07-03 17:36:36 +0800
committerDavid Sterba <>2014-08-22 15:04:50 +0200
commit23d7f6d9dc0aa42e30fe9642b4e0876354d2c02e (patch)
treea4126379363d41fb397f73df5d532f65104d10f2 /volumes.c
parentbc70abad8cddc344bef1378017d159139c89d4ba (diff)
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 <>
Diffstat (limited to 'volumes.c')
1 files changed, 2 insertions, 2 deletions
diff --git a/volumes.c b/volumes.c
index 36f60501..f623a444 100644
--- a/volumes.c
+++ b/volumes.c
@@ -233,7 +233,7 @@ fail:
int btrfs_scan_one_device(int fd, const char *path,
struct btrfs_fs_devices **fs_devices_ret,
- u64 *total_devs, u64 super_offset)
+ u64 *total_devs, u64 super_offset, int super_recover)
struct btrfs_super_block *disk_super;
char *buf;
@@ -246,7 +246,7 @@ int btrfs_scan_one_device(int fd, const char *path,
goto error;
disk_super = (struct btrfs_super_block *)buf;
- ret = btrfs_read_dev_super(fd, disk_super, super_offset);
+ ret = btrfs_read_dev_super(fd, disk_super, super_offset, super_recover);
if (ret < 0) {
ret = -EIO;
goto error_brelse;