btrfs-progs: fix return code for failed replace start
When replace starts with no-background and fails for the reason that a BTRFS_FS_EXCL_OP is in progress, we still return the value 0 and also leak the target device open, because in cmd_replace_start() we missed the goto leave_with_error for this error. So the test case btrfs/064 in its seqres.full output reports... Replacing /dev/sdf with /dev/sdc ERROR: /dev/sdc is mounted instead of... Replacing /dev/sdc with /dev/sdf ERROR: ioctl(DEV_REPLACE_START) '/mnt/scratch': add/delete/balance/replace/resize operation in progress for the failed replace attempts in the test case Fix it by jumping to the error label which also fixes the leaked open device. Signed-off-by: Anand Jain <anand.jain@oracle.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
feb8f56ba2
commit
ddf878187e
|
@ -323,9 +323,11 @@ static int cmd_replace_start(const struct cmd_struct *cmd,
|
|||
goto leave_with_error;
|
||||
}
|
||||
|
||||
if (ret > 0)
|
||||
if (ret > 0) {
|
||||
error("ioctl(DEV_REPLACE_START) '%s': %s", path,
|
||||
btrfs_err_str(ret));
|
||||
goto leave_with_error;
|
||||
}
|
||||
|
||||
if (start_args.result != BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_RESULT &&
|
||||
start_args.result != BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR) {
|
||||
|
|
Loading…
Reference in New Issue