From: Greg Kroah-Hartman Date: Wed, 29 May 2019 18:33:44 +0000 (-0700) Subject: 4.19-stable patches X-Git-Tag: v5.1.6~10 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e1809c3f130e0dd3cc5a3b849e79d9bed480b821;p=thirdparty%2Fkernel%2Fstable-queue.git 4.19-stable patches added patches: revert-btrfs-honour-fitrim-range-constraints-during-free-space-trim.patch --- diff --git a/queue-4.19/revert-btrfs-honour-fitrim-range-constraints-during-free-space-trim.patch b/queue-4.19/revert-btrfs-honour-fitrim-range-constraints-during-free-space-trim.patch new file mode 100644 index 00000000000..24b5e70ad2f --- /dev/null +++ b/queue-4.19/revert-btrfs-honour-fitrim-range-constraints-during-free-space-trim.patch @@ -0,0 +1,96 @@ +From dsterba@suse.com Wed May 29 11:30:42 2019 +From: David Sterba +Date: Wed, 29 May 2019 19:25:44 +0200 +Subject: Revert "btrfs: Honour FITRIM range constraints during free space trim" +To: stable@vger.kernel.org +Cc: David Sterba +Message-ID: <20190529172547.30563-2-dsterba@suse.com> + +From: David Sterba + +This reverts commit 8b13bb911f0c0c77d41e5ddc41ad3c127c356b8a. + +There is currently no corresponding patch in master due to additional +changes that would be significantly different from plain revert in the +respective stable branch. + +The range argument was not handled correctly and could cause trim to +overlap allocated areas or reach beyond the end of the device. The +address space that fitrim normally operates on is in logical +coordinates, while the discards are done on the physical device extents. +This distinction cannot be made with the current ioctl interface and +caused the confusion. + +The bug depends on the layout of block groups and does not always +happen. The whole-fs trim (run by default by the fstrim tool) is not +affected. + +Signed-off-by: David Sterba +Signed-off-by: Greg Kroah-Hartman +--- + fs/btrfs/extent-tree.c | 25 ++++++------------------- + 1 file changed, 6 insertions(+), 19 deletions(-) + +--- a/fs/btrfs/extent-tree.c ++++ b/fs/btrfs/extent-tree.c +@@ -10788,9 +10788,9 @@ int btrfs_error_unpin_extent_range(struc + * held back allocations. + */ + static int btrfs_trim_free_extents(struct btrfs_device *device, +- struct fstrim_range *range, u64 *trimmed) ++ u64 minlen, u64 *trimmed) + { +- u64 start = range->start, len = 0; ++ u64 start = 0, len = 0; + int ret; + + *trimmed = 0; +@@ -10833,8 +10833,8 @@ static int btrfs_trim_free_extents(struc + if (!trans) + up_read(&fs_info->commit_root_sem); + +- ret = find_free_dev_extent_start(trans, device, range->minlen, +- start, &start, &len); ++ ret = find_free_dev_extent_start(trans, device, minlen, start, ++ &start, &len); + if (trans) { + up_read(&fs_info->commit_root_sem); + btrfs_put_transaction(trans); +@@ -10847,16 +10847,6 @@ static int btrfs_trim_free_extents(struc + break; + } + +- /* If we are out of the passed range break */ +- if (start > range->start + range->len - 1) { +- mutex_unlock(&fs_info->chunk_mutex); +- ret = 0; +- break; +- } +- +- start = max(range->start, start); +- len = min(range->len, len); +- + ret = btrfs_issue_discard(device->bdev, start, len, &bytes); + mutex_unlock(&fs_info->chunk_mutex); + +@@ -10866,10 +10856,6 @@ static int btrfs_trim_free_extents(struc + start += len; + *trimmed += bytes; + +- /* We've trimmed enough */ +- if (*trimmed >= range->len) +- break; +- + if (fatal_signal_pending(current)) { + ret = -ERESTARTSYS; + break; +@@ -10953,7 +10939,8 @@ int btrfs_trim_fs(struct btrfs_fs_info * + mutex_lock(&fs_info->fs_devices->device_list_mutex); + devices = &fs_info->fs_devices->devices; + list_for_each_entry(device, devices, dev_list) { +- ret = btrfs_trim_free_extents(device, range, &group_trimmed); ++ ret = btrfs_trim_free_extents(device, range->minlen, ++ &group_trimmed); + if (ret) { + dev_failed++; + dev_ret = ret; diff --git a/queue-4.19/series b/queue-4.19/series index 9f889aa3965..92511781a85 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -40,3 +40,4 @@ bpf-devmap-fix-use-after-free-read-in-__dev_map_entry_free.patch batman-adv-mcast-fix-multicast-tt-tvlv-worker-locking.patch at76c50x-usb-don-t-register-led_trigger-if-usb_register_driver-failed.patch acct_on-don-t-mess-with-freeze-protection.patch +revert-btrfs-honour-fitrim-range-constraints-during-free-space-trim.patch