diff options
author | Nikolay Borisov <nborisov@suse.com> | 2018-09-03 11:46:14 +0200 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2018-10-15 17:23:30 +0200 |
commit | a27a94c2b0c727517c17cf2ca3a9f7291caadfbc (patch) | |
tree | 4187cec66f66085176afed51436c29f71404b4b9 /fs/btrfs/volumes.c | |
parent | btrfs: Make btrfs_find_device_missing_or_by_path return directly a device (diff) | |
download | linux-a27a94c2b0c727517c17cf2ca3a9f7291caadfbc.tar.xz linux-a27a94c2b0c727517c17cf2ca3a9f7291caadfbc.zip |
btrfs: Make btrfs_find_device_by_devspec return btrfs_device directly
Instead of returning an error value and using one of the parameters for
returning the actual object we are interested in just refactor the
function to directly return btrfs_device *. Also bubble up the error
handling for the special BTRFS_ERROR_DEV_MISSING_NOT_FOUND value into
btrfs_rm_device. No functional changes.
Signed-off-by: Nikolay Borisov <nborisov@suse.com>
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/volumes.c')
-rw-r--r-- | fs/btrfs/volumes.c | 39 |
1 files changed, 18 insertions, 21 deletions
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index b39e4bd6457f..86c2330ac83f 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -1889,10 +1889,16 @@ int btrfs_rm_device(struct btrfs_fs_info *fs_info, const char *device_path, if (ret) goto out; - ret = btrfs_find_device_by_devspec(fs_info, devid, device_path, - &device); - if (ret) + device = btrfs_find_device_by_devspec(fs_info, devid, device_path); + + if (IS_ERR(device)) { + if (PTR_ERR(device) == -ENOENT && + strcmp(device_path, "missing") == 0) + ret = BTRFS_ERROR_DEV_MISSING_NOT_FOUND; + else + ret = PTR_ERR(device); goto out; + } if (test_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state)) { ret = BTRFS_ERROR_DEV_TGT_REPLACE; @@ -2163,30 +2169,21 @@ static struct btrfs_device *btrfs_find_device_missing_or_by_path( /* * Lookup a device given by device id, or the path if the id is 0. */ -int btrfs_find_device_by_devspec(struct btrfs_fs_info *fs_info, u64 devid, - const char *devpath, - struct btrfs_device **device) +struct btrfs_device *btrfs_find_device_by_devspec( + struct btrfs_fs_info *fs_info, u64 devid, const char *devpath) { - int ret = 0; + struct btrfs_device *device; if (devid) { - *device = btrfs_find_device(fs_info, devid, NULL, NULL); - if (!*device) - ret = -ENOENT; + device = btrfs_find_device(fs_info, devid, NULL, NULL); + if (!device) + return ERR_PTR(-ENOENT); } else { if (!devpath || !devpath[0]) - return -EINVAL; - - *device = btrfs_find_device_missing_or_by_path(fs_info, devpath); - if (IS_ERR(*device)) { - if (PTR_ERR(*device) == -ENOENT && - strcmp(devpath, "missing") == 0) - ret = BTRFS_ERROR_DEV_MISSING_NOT_FOUND; - else - ret = PTR_ERR(*device); - } + return ERR_PTR(-EINVAL); + device = btrfs_find_device_missing_or_by_path(fs_info, devpath); } - return ret; + return device; } /* |