btrfs-progs: check btrfs_scan_one_device in btrfs_scan_lblkid()

Even if it's "definitely" btrfs at this point,
btrfs_scan_one_device could fail for other reasons.

Check the return value, warn if it fails, and skip
the device register.

Resolves-Coverity-CID: 1125925
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
reviewed-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
This commit is contained in:
Eric Sandeen 2013-11-06 17:15:52 -06:00 committed by Chris Mason
parent 18800f4a31
commit e11712a146

View File

@ -1960,6 +1960,7 @@ int test_skip_this_disk(char *path)
int btrfs_scan_lblkid(int update_kernel) int btrfs_scan_lblkid(int update_kernel)
{ {
int fd = -1; int fd = -1;
int ret;
u64 num_devices; u64 num_devices;
struct btrfs_fs_devices *tmp_devices; struct btrfs_fs_devices *tmp_devices;
blkid_dev_iterate iter = NULL; blkid_dev_iterate iter = NULL;
@ -1988,8 +1989,14 @@ int btrfs_scan_lblkid(int update_kernel)
printf("ERROR: could not open %s\n", path); printf("ERROR: could not open %s\n", path);
continue; continue;
} }
btrfs_scan_one_device(fd, path, &tmp_devices, ret = btrfs_scan_one_device(fd, path, &tmp_devices,
&num_devices, BTRFS_SUPER_INFO_OFFSET); &num_devices, BTRFS_SUPER_INFO_OFFSET);
if (ret) {
printf("ERROR: could not scan %s\n", path);
close (fd);
continue;
}
close(fd); close(fd);
if (update_kernel) if (update_kernel)
btrfs_register_one_device(path); btrfs_register_one_device(path);