]> git.proxmox.com Git - pve-kernel.git/blobdiff - patches/kernel/0015-ext4-fallback-to-complex-scan-if-aligned-scan-doesn-.patch
rebase patches on top of Ubuntu-6.5.0-27.27
[pve-kernel.git] / patches / kernel / 0015-ext4-fallback-to-complex-scan-if-aligned-scan-doesn-.patch
diff --git a/patches/kernel/0015-ext4-fallback-to-complex-scan-if-aligned-scan-doesn-.patch b/patches/kernel/0015-ext4-fallback-to-complex-scan-if-aligned-scan-doesn-.patch
deleted file mode 100644 (file)
index 49edbb2..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Ojaswin Mujoo <ojaswin@linux.ibm.com>
-Date: Fri, 15 Dec 2023 16:49:50 +0530
-Subject: [PATCH] ext4: fallback to complex scan if aligned scan doesn't work
-
-Currently in case the goal length is a multiple of stripe size we use
-ext4_mb_scan_aligned() to find the stripe size aligned physical blocks.
-In case we are not able to find any, we again go back to calling
-ext4_mb_choose_next_group() to search for a different suitable block
-group. However, since the linear search always begins from the start,
-most of the times we end up with the same BG and the cycle continues.
-
-With large fliesystems, the CPU can be stuck in this loop for hours
-which can slow down the whole system. Hence, until we figure out a
-better way to continue the search (rather than starting from beginning)
-in ext4_mb_choose_next_group(), lets just fallback to
-ext4_mb_complex_scan_group() in case aligned scan fails, as it is much
-more likely to find the needed blocks.
-
-Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
----
- fs/ext4/mballoc.c | 21 +++++++++++++--------
- 1 file changed, 13 insertions(+), 8 deletions(-)
-
-diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
-index 3711be697a0a..0c81836f092e 100644
---- a/fs/ext4/mballoc.c
-+++ b/fs/ext4/mballoc.c
-@@ -2894,14 +2894,19 @@ ext4_mb_regular_allocator(struct ext4_allocation_context *ac)
-                       ac->ac_groups_scanned++;
-                       if (cr == CR_POWER2_ALIGNED)
-                               ext4_mb_simple_scan_group(ac, &e4b);
--                      else if ((cr == CR_GOAL_LEN_FAST ||
--                               cr == CR_BEST_AVAIL_LEN) &&
--                               sbi->s_stripe &&
--                               !(ac->ac_g_ex.fe_len %
--                               EXT4_B2C(sbi, sbi->s_stripe)))
--                              ext4_mb_scan_aligned(ac, &e4b);
--                      else
--                              ext4_mb_complex_scan_group(ac, &e4b);
-+                      else {
-+                              bool is_stripe_aligned = sbi->s_stripe &&
-+                                      !(ac->ac_g_ex.fe_len %
-+                                        EXT4_B2C(sbi, sbi->s_stripe));
-+
-+                              if ((cr == CR_GOAL_LEN_FAST ||
-+                                   cr == CR_BEST_AVAIL_LEN) &&
-+                                  is_stripe_aligned)
-+                                      ext4_mb_scan_aligned(ac, &e4b);
-+
-+                              if (ac->ac_status == AC_STATUS_CONTINUE)
-+                                      ext4_mb_complex_scan_group(ac, &e4b);
-+                      }
-                       ext4_unlock_group(sb, group);
-                       ext4_mb_unload_buddy(&e4b);