From: Kaixu Xia <[email protected]> The variable ret is overwritten by the following variable defrag_count. Actually the code should return EAGAIN when receiving a pending signal in the defrag loops.
Reported-by: Tosk Robot <[email protected]> Signed-off-by: Kaixu Xia <[email protected]> --- v2 -return EAGAIN instead of remove the EAGAIN error. fs/btrfs/ioctl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index 69a384145dc6..6f13db6d30bd 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -1519,7 +1519,7 @@ int btrfs_defrag_file(struct inode *inode, struct file *file, if (btrfs_defrag_cancelled(fs_info)) { btrfs_debug(fs_info, "defrag_file cancelled"); ret = -EAGAIN; - break; + goto out_ra; } if (!should_defrag_range(inode, (u64)i << PAGE_SHIFT, -- 2.20.0

