Message ID | 20240902111110.746509-1-luca.stefani.ge1@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | btrfs: Always update fstrim_range on failure | expand |
在 2024/9/2 20:40, Luca Stefani 写道: > 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. > > Signed-off-by: Luca Stefani <luca.stefani.ge1@gmail.com> Reviewed-by: Qu Wenruo <wqu@suse.com> Thanks, Qu > --- > fs/btrfs/extent-tree.c | 4 ++-- > fs/btrfs/ioctl.c | 4 +--- > 2 files changed, 3 insertions(+), 5 deletions(-) > > diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c > index feec49e6f9c8..a5966324607d 100644 > --- a/fs/btrfs/extent-tree.c > +++ b/fs/btrfs/extent-tree.c > @@ -6551,13 +6551,13 @@ int btrfs_trim_fs(struct btrfs_fs_info *fs_info, struct fstrim_range *range) > continue; > > ret = btrfs_trim_free_extents(device, &group_trimmed); > + > + trimmed += group_trimmed; > if (ret) { > dev_failed++; > dev_ret = ret; > break; > } > - > - trimmed += group_trimmed; > } > mutex_unlock(&fs_devices->device_list_mutex); > > diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c > index e0a664b8a46a..94d8f29b04c5 100644 > --- a/fs/btrfs/ioctl.c > +++ b/fs/btrfs/ioctl.c > @@ -543,13 +543,11 @@ static noinline int btrfs_ioctl_fitrim(struct btrfs_fs_info *fs_info, > > range.minlen = max(range.minlen, minlen); > ret = btrfs_trim_fs(fs_info, &range); > - if (ret < 0) > - return ret; > > if (copy_to_user(arg, &range, sizeof(range))) > return -EFAULT; > > - return 0; > + return ret; > } > > int __pure btrfs_is_empty_uuid(const u8 *uuid)
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index feec49e6f9c8..a5966324607d 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -6551,13 +6551,13 @@ int btrfs_trim_fs(struct btrfs_fs_info *fs_info, struct fstrim_range *range) continue; ret = btrfs_trim_free_extents(device, &group_trimmed); + + trimmed += group_trimmed; if (ret) { dev_failed++; dev_ret = ret; break; } - - trimmed += group_trimmed; } mutex_unlock(&fs_devices->device_list_mutex); diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index e0a664b8a46a..94d8f29b04c5 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -543,13 +543,11 @@ static noinline int btrfs_ioctl_fitrim(struct btrfs_fs_info *fs_info, range.minlen = max(range.minlen, minlen); ret = btrfs_trim_fs(fs_info, &range); - if (ret < 0) - return ret; if (copy_to_user(arg, &range, sizeof(range))) return -EFAULT; - return 0; + return ret; } int __pure btrfs_is_empty_uuid(const u8 *uuid)
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. Signed-off-by: Luca Stefani <luca.stefani.ge1@gmail.com> --- fs/btrfs/extent-tree.c | 4 ++-- fs/btrfs/ioctl.c | 4 +--- 2 files changed, 3 insertions(+), 5 deletions(-)