btrfs-progs: Add missing devices check for mounted btrfs.
In btrfs/003 of xfstest, it will check whether btrfs fi show can find missing devices. But before the patch, btrfs-progs will not check whether device missing if given a mounted btrfs mountpoint/block device. This patch fixes the bug and will pass btrfs/003. Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com> Cc: Anand Jain <anand.jain@oracle.com> Signed-off-by: David Sterba <dsterba@suse.cz> Signed-off-by: Chris Mason <clm@fb.com>
This commit is contained in:
parent
1484081f61
commit
206efb60cb
|
@ -364,6 +364,8 @@ static int print_one_fs(struct btrfs_ioctl_fs_info_args *fs_info,
|
||||||
char *label, char *path)
|
char *label, char *path)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
int fd;
|
||||||
|
int missing = 0;
|
||||||
char uuidbuf[BTRFS_UUID_UNPARSED_SIZE];
|
char uuidbuf[BTRFS_UUID_UNPARSED_SIZE];
|
||||||
struct btrfs_ioctl_dev_info_args *tmp_dev_info;
|
struct btrfs_ioctl_dev_info_args *tmp_dev_info;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -386,6 +388,14 @@ static int print_one_fs(struct btrfs_ioctl_fs_info_args *fs_info,
|
||||||
|
|
||||||
for (i = 0; i < fs_info->num_devices; i++) {
|
for (i = 0; i < fs_info->num_devices; i++) {
|
||||||
tmp_dev_info = (struct btrfs_ioctl_dev_info_args *)&dev_info[i];
|
tmp_dev_info = (struct btrfs_ioctl_dev_info_args *)&dev_info[i];
|
||||||
|
|
||||||
|
/* Add check for missing devices even mounted */
|
||||||
|
fd = open((char *)tmp_dev_info->path, O_RDONLY);
|
||||||
|
if (fd < 0) {
|
||||||
|
missing = 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
close(fd);
|
||||||
printf("\tdevid %4llu size %s used %s path %s\n",
|
printf("\tdevid %4llu size %s used %s path %s\n",
|
||||||
tmp_dev_info->devid,
|
tmp_dev_info->devid,
|
||||||
pretty_size(tmp_dev_info->total_bytes),
|
pretty_size(tmp_dev_info->total_bytes),
|
||||||
|
@ -393,6 +403,8 @@ static int print_one_fs(struct btrfs_ioctl_fs_info_args *fs_info,
|
||||||
tmp_dev_info->path);
|
tmp_dev_info->path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (missing)
|
||||||
|
printf("\t*** Some devices missing\n");
|
||||||
printf("\n");
|
printf("\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue