X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=super-recover.c;h=88ecdee83e14c485550cc81a07854090e734654d;hb=ae60006cee1c15f87adee22d4595384ea5ab596b;hp=cd6ba372d4dd4ad644d35043c198c245e58adbeb;hpb=9c59fb98094429150a338980fb593c1887b6e25d;p=platform%2Fupstream%2Fbtrfs-progs.git diff --git a/super-recover.c b/super-recover.c index cd6ba37..88ecdee 100644 --- a/super-recover.c +++ b/super-recover.c @@ -16,9 +16,6 @@ * Boston, MA 021110-1307, USA. */ -#define _XOPEN_SOURCE 500 -#define _GNU_SOURCE 1 - #include #include #include @@ -69,21 +66,11 @@ void init_recover_superblock(struct btrfs_recover_superblock *recover) static void free_recover_superblock(struct btrfs_recover_superblock *recover) { - struct btrfs_device *device; struct super_block_record *record; if (!recover->fs_devices) return; - while (!list_empty(&recover->fs_devices->devices)) { - device = list_entry(recover->fs_devices->devices.next, - struct btrfs_device, dev_list); - list_del_init(&device->dev_list); - free(device->name); - free(device); - } - free(recover->fs_devices); - while (!list_empty(&recover->good_supers)) { record = list_entry(recover->good_supers.next, struct super_block_record, list); @@ -292,7 +279,7 @@ int btrfs_recover_superblocks(const char *dname, } init_recover_superblock(&recover); - ret = btrfs_scan_fs_devices(fd, dname, &recover.fs_devices, 0, 0); + ret = btrfs_scan_fs_devices(fd, dname, &recover.fs_devices, 0, 1, 0); close(fd); if (ret) { ret = 1; @@ -329,7 +316,7 @@ int btrfs_recover_superblocks(const char *dname, ret = 3; goto no_recover; } - /* reset super_bytenr in order that we will rewite all supers */ + /* 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); if (!ret) @@ -341,6 +328,9 @@ int btrfs_recover_superblocks(const char *dname, no_recover: recover_err_str(ret); free_recover_superblock(&recover); + /* check if we have freed fs_devices in close_ctree() */ + if (!root) + btrfs_close_devices(recover.fs_devices); return ret; }