diff options
-rw-r--r-- | fs/btrfs/volumes.c | 35 |
1 files changed, 18 insertions, 17 deletions
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 61432eefb1dc..e4be0f679460 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -2402,7 +2402,8 @@ static struct btrfs_device *btrfs_find_device_by_path( * Lookup a device given by device id, or the path if the id is 0. */ struct btrfs_device *btrfs_find_device_by_devspec( - struct btrfs_fs_info *fs_info, u64 devid, const char *devpath) + struct btrfs_fs_info *fs_info, u64 devid, + const char *device_path) { struct btrfs_device *device; @@ -2410,24 +2411,24 @@ struct btrfs_device *btrfs_find_device_by_devspec( device = btrfs_find_device(fs_info, devid, NULL, NULL); if (!device) return ERR_PTR(-ENOENT); - } else { - if (!devpath || !devpath[0]) - return ERR_PTR(-EINVAL); - - if (strcmp(devpath, "missing") == 0) { - list_for_each_entry(device, &fs_info->fs_devices->devices, - dev_list) { - if (test_bit(BTRFS_DEV_STATE_IN_FS_METADATA, - &device->dev_state) && - !device->bdev) - return device; - } - return ERR_PTR(-ENOENT); - } else { - device = btrfs_find_device_by_path(fs_info, devpath); + return device; + } + + if (!device_path || !device_path[0]) + return ERR_PTR(-EINVAL); + + if (strcmp(device_path, "missing") == 0) { + /* Find first missing device */ + list_for_each_entry(device, &fs_info->fs_devices->devices, + dev_list) { + if (test_bit(BTRFS_DEV_STATE_IN_FS_METADATA, + &device->dev_state) && !device->bdev) + return device; } + return ERR_PTR(-ENOENT); } - return device; + + return btrfs_find_device_by_path(fs_info, device_path); } /* |