Commit 33685972 authored by Luca Stefani's avatar Luca Stefani Committed by David Sterba

btrfs: always update fstrim_range on failure in FITRIM ioctl

Even in case of failure we could've discarded some data and userspace
should be made aware of it, so copy fstrim_range to userspace
regardless.

Also make sure to update the trimmed bytes amount even if
btrfs_trim_free_extents fails.

CC: stable@vger.kernel.org # 5.15+
Reviewed-by: default avatarQu Wenruo <wqu@suse.com>
Signed-off-by: default avatarLuca Stefani <luca.stefani.ge1@gmail.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent faad57ae
...@@ -6551,13 +6551,13 @@ int btrfs_trim_fs(struct btrfs_fs_info *fs_info, struct fstrim_range *range) ...@@ -6551,13 +6551,13 @@ int btrfs_trim_fs(struct btrfs_fs_info *fs_info, struct fstrim_range *range)
continue; continue;
ret = btrfs_trim_free_extents(device, &group_trimmed); ret = btrfs_trim_free_extents(device, &group_trimmed);
trimmed += group_trimmed;
if (ret) { if (ret) {
dev_failed++; dev_failed++;
dev_ret = ret; dev_ret = ret;
break; break;
} }
trimmed += group_trimmed;
} }
mutex_unlock(&fs_devices->device_list_mutex); mutex_unlock(&fs_devices->device_list_mutex);
......
...@@ -543,13 +543,11 @@ static noinline int btrfs_ioctl_fitrim(struct btrfs_fs_info *fs_info, ...@@ -543,13 +543,11 @@ static noinline int btrfs_ioctl_fitrim(struct btrfs_fs_info *fs_info,
range.minlen = max(range.minlen, minlen); range.minlen = max(range.minlen, minlen);
ret = btrfs_trim_fs(fs_info, &range); ret = btrfs_trim_fs(fs_info, &range);
if (ret < 0)
return ret;
if (copy_to_user(arg, &range, sizeof(range))) if (copy_to_user(arg, &range, sizeof(range)))
return -EFAULT; return -EFAULT;
return 0; return ret;
} }
int __pure btrfs_is_empty_uuid(const u8 *uuid) int __pure btrfs_is_empty_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