From 27616934b741a77bf99757016380d5cc15072428 Mon Sep 17 00:00:00 2001 From: Thomas Lamprecht Date: Tue, 2 Apr 2024 18:14:21 +0200 Subject: [PATCH 1/1] update submodule and patches for 24.04 Noble based kernel Signed-off-by: Thomas Lamprecht --- ...ides-for-missing-ACS-capabilities-4..patch | 8 +- ...-default-dynamic-halt-polling-growth.patch | 2 +- ...de-unregister_netdevice-refcount-lea.patch | 4 +- ...fortify-Do-not-cast-to-unsigned-char.patch | 2 +- ...sk-out-PKRU-bit-in-xfeatures-if-vCPU.patch | 10 +- ...allow-pass-through-on-broken-hardwar.patch | 8 +- ...-Advertise-support-for-flush-by-ASID.patch | 8 +- ...rove-userspace-warnings-for-missing-.patch | 2 +- ...N-array-index-out-of-bounds-for-Powe.patch | 146 ------------------ ...-complex-scan-if-aligned-scan-doesn-.patch | 56 ------- submodules/ubuntu-kernel | 2 +- 11 files changed, 23 insertions(+), 225 deletions(-) delete mode 100644 patches/kernel/0012-drm-amd-Fix-UBSAN-array-index-out-of-bounds-for-Powe.patch delete mode 100644 patches/kernel/0013-ext4-fallback-to-complex-scan-if-aligned-scan-doesn-.patch diff --git a/patches/kernel/0004-pci-Enable-overrides-for-missing-ACS-capabilities-4..patch b/patches/kernel/0004-pci-Enable-overrides-for-missing-ACS-capabilities-4..patch index ee532b4..a099423 100644 --- a/patches/kernel/0004-pci-Enable-overrides-for-missing-ACS-capabilities-4..patch +++ b/patches/kernel/0004-pci-Enable-overrides-for-missing-ACS-capabilities-4..patch @@ -55,10 +55,10 @@ Signed-off-by: Thomas Lamprecht 2 files changed, 111 insertions(+) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt -index 90ddf08e8409..eedfabda597f 100644 +index a413dd5cf488..89d1b030e1d5 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt -@@ -4285,6 +4285,15 @@ +@@ -4401,6 +4401,15 @@ Also, it enforces the PCI Local Bus spec rule that those bits should be 0 in system reset events (useful for kexec/kdump cases). @@ -75,7 +75,7 @@ index 90ddf08e8409..eedfabda597f 100644 Safety option to keep boot IRQs enabled. This should never be necessary. diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c -index c7a5718e5729..901f55b9ac64 100644 +index 17e43aa28774..1f4202c091bb 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c @@ -287,6 +287,106 @@ static int __init pci_apply_final_quirks(void) @@ -185,7 +185,7 @@ index c7a5718e5729..901f55b9ac64 100644 /* * Decoding should be disabled for a PCI device during BAR sizing to avoid * conflict. But doing so may cause problems on host bridge and perhaps other -@@ -5091,6 +5191,8 @@ static const struct pci_dev_acs_enabled { +@@ -5100,6 +5200,8 @@ static const struct pci_dev_acs_enabled { { PCI_VENDOR_ID_CAVIUM, 0xA060, pci_quirk_mf_endpoint_acs }, /* APM X-Gene */ { PCI_VENDOR_ID_AMCC, 0xE004, pci_quirk_xgene_acs }, diff --git a/patches/kernel/0005-kvm-disable-default-dynamic-halt-polling-growth.patch b/patches/kernel/0005-kvm-disable-default-dynamic-halt-polling-growth.patch index 4bc4bd3..2a69480 100644 --- a/patches/kernel/0005-kvm-disable-default-dynamic-halt-polling-growth.patch +++ b/patches/kernel/0005-kvm-disable-default-dynamic-halt-polling-growth.patch @@ -13,7 +13,7 @@ Signed-off-by: Thomas Lamprecht 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c -index 5bbb5612b207..691ce10e7647 100644 +index 0f50960b0e3a..37f840f57f32 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -82,7 +82,7 @@ module_param(halt_poll_ns, uint, 0644); diff --git a/patches/kernel/0006-net-core-downgrade-unregister_netdevice-refcount-lea.patch b/patches/kernel/0006-net-core-downgrade-unregister_netdevice-refcount-lea.patch index af2e2b3..50a1bbe 100644 --- a/patches/kernel/0006-net-core-downgrade-unregister_netdevice-refcount-lea.patch +++ b/patches/kernel/0006-net-core-downgrade-unregister_netdevice-refcount-lea.patch @@ -14,10 +14,10 @@ Signed-off-by: Fabian Grünbichler 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/core/dev.c b/net/core/dev.c -index 4811937f572d..8850f9be9044 100644 +index 76e6438f4858..3686fc45c557 100644 --- a/net/core/dev.c +++ b/net/core/dev.c -@@ -10355,7 +10355,7 @@ static struct net_device *netdev_wait_allrefs_any(struct list_head *list) +@@ -10461,7 +10461,7 @@ static struct net_device *netdev_wait_allrefs_any(struct list_head *list) if (time_after(jiffies, warning_time + READ_ONCE(netdev_unregister_timeout_secs) * HZ)) { list_for_each_entry(dev, list, todo_list) { diff --git a/patches/kernel/0007-Revert-fortify-Do-not-cast-to-unsigned-char.patch b/patches/kernel/0007-Revert-fortify-Do-not-cast-to-unsigned-char.patch index f420c8f..2b81114 100644 --- a/patches/kernel/0007-Revert-fortify-Do-not-cast-to-unsigned-char.patch +++ b/patches/kernel/0007-Revert-fortify-Do-not-cast-to-unsigned-char.patch @@ -16,7 +16,7 @@ Signed-off-by: Thomas Lamprecht 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/linux/fortify-string.h b/include/linux/fortify-string.h -index da51a83b2829..9d9e7822eddf 100644 +index 89a6888f2f9e..66e0b60dcabb 100644 --- a/include/linux/fortify-string.h +++ b/include/linux/fortify-string.h @@ -18,7 +18,7 @@ void __write_overflow_field(size_t avail, size_t wanted) __compiletime_warning(" diff --git a/patches/kernel/0008-kvm-xsave-set-mask-out-PKRU-bit-in-xfeatures-if-vCPU.patch b/patches/kernel/0008-kvm-xsave-set-mask-out-PKRU-bit-in-xfeatures-if-vCPU.patch index f1d9ca8..f0e1265 100644 --- a/patches/kernel/0008-kvm-xsave-set-mask-out-PKRU-bit-in-xfeatures-if-vCPU.patch +++ b/patches/kernel/0008-kvm-xsave-set-mask-out-PKRU-bit-in-xfeatures-if-vCPU.patch @@ -78,10 +78,10 @@ Signed-off-by: Thomas Lamprecht 3 files changed, 21 insertions(+) diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c -index 7bdc66abfc92..e2b67975869c 100644 +index adba49afb5fe..e6e4408c8d51 100644 --- a/arch/x86/kvm/cpuid.c +++ b/arch/x86/kvm/cpuid.c -@@ -249,6 +249,12 @@ static u64 cpuid_get_supported_xcr0(struct kvm_cpuid_entry2 *entries, int nent) +@@ -262,6 +262,12 @@ static u64 cpuid_get_supported_xcr0(struct kvm_cpuid_entry2 *entries, int nent) return (best->eax | ((u64)best->edx << 32)) & kvm_caps.supported_xcr0; } @@ -95,7 +95,7 @@ index 7bdc66abfc92..e2b67975869c 100644 int nent) { diff --git a/arch/x86/kvm/cpuid.h b/arch/x86/kvm/cpuid.h -index b1658c0de847..12a02851ff57 100644 +index 856e3037e74f..0ac5a84adcd5 100644 --- a/arch/x86/kvm/cpuid.h +++ b/arch/x86/kvm/cpuid.h @@ -32,6 +32,8 @@ int kvm_vcpu_ioctl_get_cpuid2(struct kvm_vcpu *vcpu, @@ -108,10 +108,10 @@ index b1658c0de847..12a02851ff57 100644 int cpuid_query_maxphyaddr(struct kvm_vcpu *vcpu); diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c -index a5c8a01f7e7e..632d2d18041a 100644 +index ffe580169c93..f0870144a6cf 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c -@@ -5426,6 +5426,19 @@ static int kvm_vcpu_ioctl_x86_set_xsave(struct kvm_vcpu *vcpu, +@@ -5580,6 +5580,19 @@ static int kvm_vcpu_ioctl_x86_set_xsave(struct kvm_vcpu *vcpu, if (fpstate_is_confidential(&vcpu->arch.guest_fpu)) return 0; diff --git a/patches/kernel/0009-allow-opt-in-to-allow-pass-through-on-broken-hardwar.patch b/patches/kernel/0009-allow-opt-in-to-allow-pass-through-on-broken-hardwar.patch index e3cb595..e73292f 100644 --- a/patches/kernel/0009-allow-opt-in-to-allow-pass-through-on-broken-hardwar.patch +++ b/patches/kernel/0009-allow-opt-in-to-allow-pass-through-on-broken-hardwar.patch @@ -11,10 +11,10 @@ Signed-off-by: Thomas Lamprecht 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c -index 8faccfdfe500..2b9ef40799a5 100644 +index a788062820df..4020c5336369 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c -@@ -298,6 +298,7 @@ static int dmar_map_gfx = 1; +@@ -159,6 +159,7 @@ static int dmar_map_gfx = 1; static int dmar_map_ipu = 1; static int intel_iommu_superpage = 1; static int iommu_identity_mapping; @@ -22,7 +22,7 @@ index 8faccfdfe500..2b9ef40799a5 100644 static int iommu_skip_te_disable; #define IDENTMAP_GFX 2 -@@ -359,6 +360,9 @@ static int __init intel_iommu_setup(char *str) +@@ -221,6 +222,9 @@ static int __init intel_iommu_setup(char *str) } else if (!strncmp(str, "tboot_noforce", 13)) { pr_info("Intel-IOMMU: not forcing on after tboot. This could expose security risk for tboot\n"); intel_iommu_tboot_noforce = 1; @@ -32,7 +32,7 @@ index 8faccfdfe500..2b9ef40799a5 100644 } else { pr_notice("Unknown option - '%s'\n", str); } -@@ -2506,7 +2510,7 @@ static bool device_rmrr_is_relaxable(struct device *dev) +@@ -2395,7 +2399,7 @@ static bool device_rmrr_is_relaxable(struct device *dev) return false; pdev = to_pci_dev(dev); diff --git a/patches/kernel/0010-KVM-nSVM-Advertise-support-for-flush-by-ASID.patch b/patches/kernel/0010-KVM-nSVM-Advertise-support-for-flush-by-ASID.patch index bdfc0f0..f10b59f 100644 --- a/patches/kernel/0010-KVM-nSVM-Advertise-support-for-flush-by-ASID.patch +++ b/patches/kernel/0010-KVM-nSVM-Advertise-support-for-flush-by-ASID.patch @@ -24,14 +24,14 @@ Signed-off-by: Thomas Lamprecht 1 file changed, 1 insertion(+) diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c -index 99832814341c..e8bb2bfd1ba1 100644 +index e90b429c84f1..5c7faf7c447f 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c -@@ -4985,6 +4985,7 @@ static __init void svm_set_cpu_caps(void) +@@ -5085,6 +5085,7 @@ static __init void svm_set_cpu_caps(void) if (nested) { kvm_cpu_cap_set(X86_FEATURE_SVM); kvm_cpu_cap_set(X86_FEATURE_VMCBCLEAN); + kvm_cpu_cap_set(X86_FEATURE_FLUSHBYASID); - if (nrips) - kvm_cpu_cap_set(X86_FEATURE_NRIPS); + /* + * KVM currently flushes TLBs on *every* nested SVM transition, diff --git a/patches/kernel/0011-revert-memfd-improve-userspace-warnings-for-missing-.patch b/patches/kernel/0011-revert-memfd-improve-userspace-warnings-for-missing-.patch index fec2af2..5df98ce 100644 --- a/patches/kernel/0011-revert-memfd-improve-userspace-warnings-for-missing-.patch +++ b/patches/kernel/0011-revert-memfd-improve-userspace-warnings-for-missing-.patch @@ -30,7 +30,7 @@ Signed-off-by: Thomas Lamprecht 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/memfd.c b/mm/memfd.c -index 2dba2cb6f0d0..1c077e98e116 100644 +index d3a1ba4208c9..6a9de5d9105e 100644 --- a/mm/memfd.c +++ b/mm/memfd.c @@ -282,7 +282,7 @@ static int check_sysctl_memfd_noexec(unsigned int *flags) diff --git a/patches/kernel/0012-drm-amd-Fix-UBSAN-array-index-out-of-bounds-for-Powe.patch b/patches/kernel/0012-drm-amd-Fix-UBSAN-array-index-out-of-bounds-for-Powe.patch deleted file mode 100644 index 6f92403..0000000 --- a/patches/kernel/0012-drm-amd-Fix-UBSAN-array-index-out-of-bounds-for-Powe.patch +++ /dev/null @@ -1,146 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Alex Deucher -Date: Fri, 27 Oct 2023 16:40:47 -0400 -Subject: [PATCH] drm/amd: Fix UBSAN array-index-out-of-bounds for Powerplay - headers -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -For pptable structs that use flexible array sizes, use flexible arrays. - -Link: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2039926 -Reviewed-by: Mario Limonciello -Acked-by: Christian König -Signed-off-by: Alex Deucher -(cherry-picked from commit 49afe91370b86566857a3c2c39612cf098110885) -Signed-off-by: Fiona Ebner ---- - .../drm/amd/pm/powerplay/hwmgr/pptable_v1_0.h | 4 ++-- - .../amd/pm/powerplay/hwmgr/vega10_pptable.h | 24 +++++++++---------- - 2 files changed, 14 insertions(+), 14 deletions(-) - -diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/pptable_v1_0.h b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/pptable_v1_0.h -index e0e40b054c08..5ec564dbf339 100644 ---- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/pptable_v1_0.h -+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/pptable_v1_0.h -@@ -367,7 +367,7 @@ typedef struct _ATOM_Tonga_VCE_State_Record { - typedef struct _ATOM_Tonga_VCE_State_Table { - UCHAR ucRevId; - UCHAR ucNumEntries; -- ATOM_Tonga_VCE_State_Record entries[1]; -+ ATOM_Tonga_VCE_State_Record entries[]; - } ATOM_Tonga_VCE_State_Table; - - typedef struct _ATOM_Tonga_PowerTune_Table { -@@ -482,7 +482,7 @@ typedef struct _ATOM_Tonga_Hard_Limit_Record { - typedef struct _ATOM_Tonga_Hard_Limit_Table { - UCHAR ucRevId; - UCHAR ucNumEntries; -- ATOM_Tonga_Hard_Limit_Record entries[1]; -+ ATOM_Tonga_Hard_Limit_Record entries[]; - } ATOM_Tonga_Hard_Limit_Table; - - typedef struct _ATOM_Tonga_GPIO_Table { -diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_pptable.h b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_pptable.h -index 9c479bd9a786..a372abcd01be 100644 ---- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_pptable.h -+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_pptable.h -@@ -129,7 +129,7 @@ typedef struct _ATOM_Vega10_State { - typedef struct _ATOM_Vega10_State_Array { - UCHAR ucRevId; - UCHAR ucNumEntries; /* Number of entries. */ -- ATOM_Vega10_State states[1]; /* Dynamically allocate entries. */ -+ ATOM_Vega10_State states[]; /* Dynamically allocate entries. */ - } ATOM_Vega10_State_Array; - - typedef struct _ATOM_Vega10_CLK_Dependency_Record { -@@ -169,37 +169,37 @@ typedef struct _ATOM_Vega10_GFXCLK_Dependency_Table { - typedef struct _ATOM_Vega10_MCLK_Dependency_Table { - UCHAR ucRevId; - UCHAR ucNumEntries; /* Number of entries. */ -- ATOM_Vega10_MCLK_Dependency_Record entries[1]; /* Dynamically allocate entries. */ -+ ATOM_Vega10_MCLK_Dependency_Record entries[]; /* Dynamically allocate entries. */ - } ATOM_Vega10_MCLK_Dependency_Table; - - typedef struct _ATOM_Vega10_SOCCLK_Dependency_Table { - UCHAR ucRevId; - UCHAR ucNumEntries; /* Number of entries. */ -- ATOM_Vega10_CLK_Dependency_Record entries[1]; /* Dynamically allocate entries. */ -+ ATOM_Vega10_CLK_Dependency_Record entries[]; /* Dynamically allocate entries. */ - } ATOM_Vega10_SOCCLK_Dependency_Table; - - typedef struct _ATOM_Vega10_DCEFCLK_Dependency_Table { - UCHAR ucRevId; - UCHAR ucNumEntries; /* Number of entries. */ -- ATOM_Vega10_CLK_Dependency_Record entries[1]; /* Dynamically allocate entries. */ -+ ATOM_Vega10_CLK_Dependency_Record entries[]; /* Dynamically allocate entries. */ - } ATOM_Vega10_DCEFCLK_Dependency_Table; - - typedef struct _ATOM_Vega10_PIXCLK_Dependency_Table { - UCHAR ucRevId; - UCHAR ucNumEntries; /* Number of entries. */ -- ATOM_Vega10_CLK_Dependency_Record entries[1]; /* Dynamically allocate entries. */ -+ ATOM_Vega10_CLK_Dependency_Record entries[]; /* Dynamically allocate entries. */ - } ATOM_Vega10_PIXCLK_Dependency_Table; - - typedef struct _ATOM_Vega10_DISPCLK_Dependency_Table { - UCHAR ucRevId; - UCHAR ucNumEntries; /* Number of entries.*/ -- ATOM_Vega10_CLK_Dependency_Record entries[1]; /* Dynamically allocate entries. */ -+ ATOM_Vega10_CLK_Dependency_Record entries[]; /* Dynamically allocate entries. */ - } ATOM_Vega10_DISPCLK_Dependency_Table; - - typedef struct _ATOM_Vega10_PHYCLK_Dependency_Table { - UCHAR ucRevId; - UCHAR ucNumEntries; /* Number of entries. */ -- ATOM_Vega10_CLK_Dependency_Record entries[1]; /* Dynamically allocate entries. */ -+ ATOM_Vega10_CLK_Dependency_Record entries[]; /* Dynamically allocate entries. */ - } ATOM_Vega10_PHYCLK_Dependency_Table; - - typedef struct _ATOM_Vega10_MM_Dependency_Record { -@@ -213,7 +213,7 @@ typedef struct _ATOM_Vega10_MM_Dependency_Record { - typedef struct _ATOM_Vega10_MM_Dependency_Table { - UCHAR ucRevId; - UCHAR ucNumEntries; /* Number of entries */ -- ATOM_Vega10_MM_Dependency_Record entries[1]; /* Dynamically allocate entries */ -+ ATOM_Vega10_MM_Dependency_Record entries[]; /* Dynamically allocate entries */ - } ATOM_Vega10_MM_Dependency_Table; - - typedef struct _ATOM_Vega10_PCIE_Record { -@@ -225,7 +225,7 @@ typedef struct _ATOM_Vega10_PCIE_Record { - typedef struct _ATOM_Vega10_PCIE_Table { - UCHAR ucRevId; - UCHAR ucNumEntries; /* Number of entries */ -- ATOM_Vega10_PCIE_Record entries[1]; /* Dynamically allocate entries. */ -+ ATOM_Vega10_PCIE_Record entries[]; /* Dynamically allocate entries. */ - } ATOM_Vega10_PCIE_Table; - - typedef struct _ATOM_Vega10_Voltage_Lookup_Record { -@@ -235,7 +235,7 @@ typedef struct _ATOM_Vega10_Voltage_Lookup_Record { - typedef struct _ATOM_Vega10_Voltage_Lookup_Table { - UCHAR ucRevId; - UCHAR ucNumEntries; /* Number of entries */ -- ATOM_Vega10_Voltage_Lookup_Record entries[1]; /* Dynamically allocate entries */ -+ ATOM_Vega10_Voltage_Lookup_Record entries[]; /* Dynamically allocate entries */ - } ATOM_Vega10_Voltage_Lookup_Table; - - typedef struct _ATOM_Vega10_Fan_Table { -@@ -329,7 +329,7 @@ typedef struct _ATOM_Vega10_VCE_State_Table - { - UCHAR ucRevId; - UCHAR ucNumEntries; -- ATOM_Vega10_VCE_State_Record entries[1]; -+ ATOM_Vega10_VCE_State_Record entries[]; - } ATOM_Vega10_VCE_State_Table; - - typedef struct _ATOM_Vega10_PowerTune_Table { -@@ -432,7 +432,7 @@ typedef struct _ATOM_Vega10_Hard_Limit_Table - { - UCHAR ucRevId; - UCHAR ucNumEntries; -- ATOM_Vega10_Hard_Limit_Record entries[1]; -+ ATOM_Vega10_Hard_Limit_Record entries[]; - } ATOM_Vega10_Hard_Limit_Table; - - typedef struct _Vega10_PPTable_Generic_SubTable_Header diff --git a/patches/kernel/0013-ext4-fallback-to-complex-scan-if-aligned-scan-doesn-.patch b/patches/kernel/0013-ext4-fallback-to-complex-scan-if-aligned-scan-doesn-.patch deleted file mode 100644 index 81a3e3f..0000000 --- a/patches/kernel/0013-ext4-fallback-to-complex-scan-if-aligned-scan-doesn-.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Ojaswin Mujoo -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 ---- - 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 2690d47a9ea2..9ff8ea02f79d 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); diff --git a/submodules/ubuntu-kernel b/submodules/ubuntu-kernel index 262b099..4427c45 160000 --- a/submodules/ubuntu-kernel +++ b/submodules/ubuntu-kernel @@ -1 +1 @@ -Subproject commit 262b099bd0e4cd21d7196abfeadb0fa2bc3512d6 +Subproject commit 4427c45609f6faf3b5b15e9e9246caa87894c36f -- 2.39.5