Commit a27a94c2 authored by Nikolay Borisov's avatar Nikolay Borisov Committed by David Sterba

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: default avatarNikolay Borisov <nborisov@suse.com>
Reviewed-by: default avatarQu Wenruo <wqu@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 6c050407
...@@ -409,10 +409,10 @@ int btrfs_dev_replace_start(struct btrfs_fs_info *fs_info, ...@@ -409,10 +409,10 @@ int btrfs_dev_replace_start(struct btrfs_fs_info *fs_info,
struct btrfs_device *tgt_device = NULL; struct btrfs_device *tgt_device = NULL;
struct btrfs_device *src_device = NULL; struct btrfs_device *src_device = NULL;
ret = btrfs_find_device_by_devspec(fs_info, srcdevid, src_device = btrfs_find_device_by_devspec(fs_info, srcdevid,
srcdev_name, &src_device); srcdev_name);
if (ret) if (IS_ERR(src_device))
return ret; return PTR_ERR(src_device);
ret = btrfs_init_dev_replace_tgtdev(fs_info, tgtdev_name, ret = btrfs_init_dev_replace_tgtdev(fs_info, tgtdev_name,
src_device, &tgt_device); src_device, &tgt_device);
......
...@@ -1889,10 +1889,16 @@ int btrfs_rm_device(struct btrfs_fs_info *fs_info, const char *device_path, ...@@ -1889,10 +1889,16 @@ int btrfs_rm_device(struct btrfs_fs_info *fs_info, const char *device_path,
if (ret) if (ret)
goto out; goto out;
ret = btrfs_find_device_by_devspec(fs_info, devid, device_path, device = btrfs_find_device_by_devspec(fs_info, devid, device_path);
&device);
if (ret) 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; goto out;
}
if (test_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state)) { if (test_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state)) {
ret = BTRFS_ERROR_DEV_TGT_REPLACE; ret = BTRFS_ERROR_DEV_TGT_REPLACE;
...@@ -2163,30 +2169,21 @@ static struct btrfs_device *btrfs_find_device_missing_or_by_path( ...@@ -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. * 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, struct btrfs_device *btrfs_find_device_by_devspec(
const char *devpath, struct btrfs_fs_info *fs_info, u64 devid, const char *devpath)
struct btrfs_device **device)
{ {
int ret = 0; struct btrfs_device *device;
if (devid) { if (devid) {
*device = btrfs_find_device(fs_info, devid, NULL, NULL); device = btrfs_find_device(fs_info, devid, NULL, NULL);
if (!*device) if (!device)
ret = -ENOENT; return ERR_PTR(-ENOENT);
} else { } else {
if (!devpath || !devpath[0]) if (!devpath || !devpath[0])
return -EINVAL; return ERR_PTR(-EINVAL);
device = btrfs_find_device_missing_or_by_path(fs_info, devpath);
*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 ret; return device;
} }
/* /*
......
...@@ -410,9 +410,9 @@ int btrfs_close_devices(struct btrfs_fs_devices *fs_devices); ...@@ -410,9 +410,9 @@ int btrfs_close_devices(struct btrfs_fs_devices *fs_devices);
void btrfs_free_extra_devids(struct btrfs_fs_devices *fs_devices, int step); void btrfs_free_extra_devids(struct btrfs_fs_devices *fs_devices, int step);
void btrfs_assign_next_active_device(struct btrfs_device *device, void btrfs_assign_next_active_device(struct btrfs_device *device,
struct btrfs_device *this_dev); struct btrfs_device *this_dev);
int btrfs_find_device_by_devspec(struct btrfs_fs_info *fs_info, u64 devid, struct btrfs_device *btrfs_find_device_by_devspec(struct btrfs_fs_info *fs_info,
const char *devpath, u64 devid,
struct btrfs_device **device); const char *devpath);
struct btrfs_device *btrfs_alloc_device(struct btrfs_fs_info *fs_info, struct btrfs_device *btrfs_alloc_device(struct btrfs_fs_info *fs_info,
const u64 *devid, const u64 *devid,
const u8 *uuid); const u8 *uuid);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment