X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=super-recover.c;h=880fd7712546c8287d8b9d315185c98982898658;hb=da71d807e635c126424340f513b9dd2f8e8af713;hp=5298d46cb132697c0316f11748e90e20c7c0be3b;hpb=3296d058b7cebb3a7a6c86988db72bed8cde49e1;p=platform%2Fupstream%2Fbtrfs-progs.git diff --git a/super-recover.c b/super-recover.c index 5298d46..880fd77 100644 --- a/super-recover.c +++ b/super-recover.c @@ -136,7 +136,7 @@ read_dev_supers(char *filename, struct btrfs_recover_superblock *recover) max_gen = btrfs_super_generation(sb); if (max_gen > recover->max_generation) recover->max_generation = max_gen; - } else if (ret == -EIO){ + } else if (ret != -ENOENT){ /* * Skip superblock which doesn't exist, only adds * really corrupted superblock @@ -177,28 +177,6 @@ static int read_fs_supers(struct btrfs_recover_superblock *recover) return 0; } -static struct super_block_record *recover_get_good_super( - struct btrfs_recover_superblock *recover) -{ - struct super_block_record *record; - record = list_entry(recover->good_supers.next, - struct super_block_record, list); - return record; -} - -static void print_all_devices(struct list_head *devices) -{ - struct btrfs_device *dev; - - printf("All Devices:\n"); - list_for_each_entry(dev, devices, dev_list) { - printf("\t"); - printf("Device: id = %llu, name = %s\n", - dev->devid, dev->name); - } - printf("\n"); -} - static void print_super_info(struct super_block_record *record) { printf("\t\tdevice name = %s\n", record->device_name); @@ -293,7 +271,9 @@ int btrfs_recover_superblocks(const char *dname, goto no_recover; } } - record = recover_get_good_super(&recover); + record = list_first_entry(&recover.good_supers, + struct super_block_record, list); + root = open_ctree(record->device_name, record->bytenr, OPEN_CTREE_RECOVER_SUPER | OPEN_CTREE_WRITES); if (!root) { @@ -302,7 +282,7 @@ int btrfs_recover_superblocks(const char *dname, } /* reset super_bytenr in order that we will rewrite all supers */ root->fs_info->super_bytenr = BTRFS_SUPER_INFO_OFFSET; - ret = write_all_supers(root); + ret = write_all_supers(root->fs_info); if (!ret) ret = 2; else