From: Greg Kroah-Hartman Date: Wed, 29 May 2019 18:33:38 +0000 (-0700) Subject: 4.14-stable patches X-Git-Tag: v5.1.6~11 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8ff67481e87c2248a77b974a6adf9139a07bb388;p=thirdparty%2Fkernel%2Fstable-queue.git 4.14-stable patches added patches: revert-btrfs-honour-fitrim-range-constraints-during-free-space-trim.patch --- diff --git a/queue-4.14/revert-btrfs-honour-fitrim-range-constraints-during-free-space-trim.patch b/queue-4.14/revert-btrfs-honour-fitrim-range-constraints-during-free-space-trim.patch new file mode 100644 index 00000000000..a3ff30f722d --- /dev/null +++ b/queue-4.14/revert-btrfs-honour-fitrim-range-constraints-during-free-space-trim.patch @@ -0,0 +1,96 @@ +From dsterba@suse.com Wed May 29 11:30:12 2019 +From: David Sterba +Date: Wed, 29 May 2019 19:25:43 +0200 +Subject: Revert "btrfs: Honour FITRIM range constraints during free space trim" +To: stable@vger.kernel.org +Cc: David Sterba +Message-ID: <20190529172547.30563-1-dsterba@suse.com> + +From: David Sterba + +This reverts commit b327ff8a9b5767ce39db650d468fb124b48974a5. + +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 +@@ -11057,9 +11057,9 @@ int btrfs_error_unpin_extent_range(struc + * transaction. + */ + 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; +@@ -11095,8 +11095,8 @@ static int btrfs_trim_free_extents(struc + refcount_inc(&trans->use_count); + spin_unlock(&fs_info->trans_lock); + +- 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) + btrfs_put_transaction(trans); + +@@ -11108,16 +11108,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); + up_read(&fs_info->commit_root_sem); + mutex_unlock(&fs_info->chunk_mutex); +@@ -11128,10 +11118,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; +@@ -11215,7 +11201,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.14/series b/queue-4.14/series index 2096f903367..bdc8d157ef0 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -32,3 +32,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 net-erspan-fix-use-after-free.patch +revert-btrfs-honour-fitrim-range-constraints-during-free-space-trim.patch