From d1d6dd08e4e15ec422ea58fb5b07ca57b837bb08 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 30 Dec 2024 09:43:36 +0100 Subject: [PATCH] 6.1-stable patches added patches: btrfs-avoid-monopolizing-a-core-when-activating-a-swap-file.patch btrfs-sysfs-fix-direct-super-block-member-reads.patch --- ...g-a-core-when-activating-a-swap-file.patch | 34 ++++++++++ ...-fix-direct-super-block-member-reads.patch | 63 +++++++++++++++++++ queue-6.1/series | 2 + 3 files changed, 99 insertions(+) create mode 100644 queue-6.1/btrfs-avoid-monopolizing-a-core-when-activating-a-swap-file.patch create mode 100644 queue-6.1/btrfs-sysfs-fix-direct-super-block-member-reads.patch diff --git a/queue-6.1/btrfs-avoid-monopolizing-a-core-when-activating-a-swap-file.patch b/queue-6.1/btrfs-avoid-monopolizing-a-core-when-activating-a-swap-file.patch new file mode 100644 index 00000000000..08d0ae84ff7 --- /dev/null +++ b/queue-6.1/btrfs-avoid-monopolizing-a-core-when-activating-a-swap-file.patch @@ -0,0 +1,34 @@ +From 2c8507c63f5498d4ee4af404a8e44ceae4345056 Mon Sep 17 00:00:00 2001 +From: Filipe Manana +Date: Mon, 9 Dec 2024 16:43:44 +0000 +Subject: btrfs: avoid monopolizing a core when activating a swap file + +From: Filipe Manana + +commit 2c8507c63f5498d4ee4af404a8e44ceae4345056 upstream. + +During swap activation we iterate over the extents of a file and we can +have many thousands of them, so we can end up in a busy loop monopolizing +a core. Avoid this by doing a voluntary reschedule after processing each +extent. + +CC: stable@vger.kernel.org # 5.4+ +Reviewed-by: Qu Wenruo +Signed-off-by: Filipe Manana +Signed-off-by: David Sterba +Signed-off-by: Greg Kroah-Hartman +--- + fs/btrfs/inode.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/fs/btrfs/inode.c ++++ b/fs/btrfs/inode.c +@@ -7387,6 +7387,8 @@ noinline int can_nocow_extent(struct ino + ret = -EAGAIN; + goto out; + } ++ ++ cond_resched(); + } + + if (orig_start) diff --git a/queue-6.1/btrfs-sysfs-fix-direct-super-block-member-reads.patch b/queue-6.1/btrfs-sysfs-fix-direct-super-block-member-reads.patch new file mode 100644 index 00000000000..47ad025a28a --- /dev/null +++ b/queue-6.1/btrfs-sysfs-fix-direct-super-block-member-reads.patch @@ -0,0 +1,63 @@ +From fca432e73db2bec0fdbfbf6d98d3ebcd5388a977 Mon Sep 17 00:00:00 2001 +From: Qu Wenruo +Date: Wed, 18 Dec 2024 17:00:56 +1030 +Subject: btrfs: sysfs: fix direct super block member reads + +From: Qu Wenruo + +commit fca432e73db2bec0fdbfbf6d98d3ebcd5388a977 upstream. + +The following sysfs entries are reading super block member directly, +which can have a different endian and cause wrong values: + +- sys/fs/btrfs//nodesize +- sys/fs/btrfs//sectorsize +- sys/fs/btrfs//clone_alignment + +Thankfully those values (nodesize and sectorsize) are always aligned +inside the btrfs_super_block, so it won't trigger unaligned read errors, +just endian problems. + +Fix them by using the native cached members instead. + +Fixes: df93589a1737 ("btrfs: export more from FS_INFO to sysfs") +CC: stable@vger.kernel.org +Reviewed-by: Naohiro Aota +Reviewed-by: Johannes Thumshirn +Signed-off-by: Qu Wenruo +Reviewed-by: David Sterba +Signed-off-by: David Sterba +Signed-off-by: Greg Kroah-Hartman +--- + fs/btrfs/sysfs.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/fs/btrfs/sysfs.c ++++ b/fs/btrfs/sysfs.c +@@ -971,7 +971,7 @@ static ssize_t btrfs_nodesize_show(struc + { + struct btrfs_fs_info *fs_info = to_fs_info(kobj); + +- return sysfs_emit(buf, "%u\n", fs_info->super_copy->nodesize); ++ return sysfs_emit(buf, "%u\n", fs_info->nodesize); + } + + BTRFS_ATTR(, nodesize, btrfs_nodesize_show); +@@ -981,7 +981,7 @@ static ssize_t btrfs_sectorsize_show(str + { + struct btrfs_fs_info *fs_info = to_fs_info(kobj); + +- return sysfs_emit(buf, "%u\n", fs_info->super_copy->sectorsize); ++ return sysfs_emit(buf, "%u\n", fs_info->sectorsize); + } + + BTRFS_ATTR(, sectorsize, btrfs_sectorsize_show); +@@ -1033,7 +1033,7 @@ static ssize_t btrfs_clone_alignment_sho + { + struct btrfs_fs_info *fs_info = to_fs_info(kobj); + +- return sysfs_emit(buf, "%u\n", fs_info->super_copy->sectorsize); ++ return sysfs_emit(buf, "%u\n", fs_info->sectorsize); + } + + BTRFS_ATTR(, clone_alignment, btrfs_clone_alignment_show); diff --git a/queue-6.1/series b/queue-6.1/series index c8c8f1832e1..52ebefc5af6 100644 --- a/queue-6.1/series +++ b/queue-6.1/series @@ -53,3 +53,5 @@ i2c-microchip-core-actually-use-repeated-sends.patch i2c-imx-add-imx7d-compatible-string-for-applying-erratum-err007805.patch i2c-microchip-core-fix-ghost-detections.patch power-supply-gpio-charger-fix-set-charge-current-limits.patch +btrfs-avoid-monopolizing-a-core-when-activating-a-swap-file.patch +btrfs-sysfs-fix-direct-super-block-member-reads.patch -- 2.47.3