From: Greg Kroah-Hartman Date: Wed, 29 May 2019 18:33:57 +0000 (-0700) Subject: 5.1-stable patches X-Git-Tag: v5.1.6~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9a1690c456f93fa971c783006b7cb2cf819ad8c0;p=thirdparty%2Fkernel%2Fstable-queue.git 5.1-stable patches added patches: revert-btrfs-honour-fitrim-range-constraints-during-free-space-trim.patch --- diff --git a/queue-5.1/revert-btrfs-honour-fitrim-range-constraints-during-free-space-trim.patch b/queue-5.1/revert-btrfs-honour-fitrim-range-constraints-during-free-space-trim.patch new file mode 100644 index 00000000000..608d2c4ea32 --- /dev/null +++ b/queue-5.1/revert-btrfs-honour-fitrim-range-constraints-during-free-space-trim.patch @@ -0,0 +1,96 @@ +From dsterba@suse.com Wed May 29 11:32:36 2019 +From: David Sterba +Date: Wed, 29 May 2019 19:25:47 +0200 +Subject: Revert "btrfs: Honour FITRIM range constraints during free space trim" +To: stable@vger.kernel.org +Cc: David Sterba +Message-ID: <20190529172547.30563-5-dsterba@suse.com> + +From: David Sterba + +This reverts commit eb432217d775a90c061681c0dfa3c7abfba75123. + +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 +@@ -11314,9 +11314,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; +@@ -11359,8 +11359,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); +@@ -11373,16 +11373,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); + +@@ -11392,10 +11382,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; +@@ -11479,7 +11465,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-5.1/series b/queue-5.1/series index aa8d0b0c587..ffc1f8a3aa4 100644 --- a/queue-5.1/series +++ b/queue-5.1/series @@ -41,3 +41,4 @@ 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 netfilter-ctnetlink-resolve-conntrack-l3-protocol-flush-regression.patch +revert-btrfs-honour-fitrim-range-constraints-during-free-space-trim.patch