Message ID | 48194115537d723d04bba0505411525b77f3e73b.1601402292.git.anand.jain@oracle.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | btrfs-progs: fix return code for failed replace start | expand |
On Wed, Sep 30, 2020 at 10:46:14AM +0800, Anand Jain wrote: > 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 adding a goto leave_with_error for this error which also fixes > the device open leak. > > Signed-off-by: Anand Jain <anand.jain@oracle.com> Added to devel, thanks.
diff --git a/cmds/replace.c b/cmds/replace.c index 84fcb80ed495..f4e81574804e 100644 --- a/cmds/replace.c +++ b/cmds/replace.c @@ -297,9 +297,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) {
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 adding a goto leave_with_error for this error which also fixes the device open leak. Signed-off-by: Anand Jain <anand.jain@oracle.com> --- This patch has passed fstests -g replace. cmds/replace.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)