public inbox for stable@vger.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	patches@lists.linux.dev, Baokun Li <libaokun1@huawei.com>,
	Zhang Yi <yi.zhang@huawei.com>, Theodore Tso <tytso@mit.edu>,
	Sasha Levin <sashal@kernel.org>
Subject: [PATCH 6.12 078/265] ext4: refactor choose group to scan group
Date: Thu, 12 Mar 2026 21:07:45 +0100	[thread overview]
Message-ID: <20260312201021.033891276@linuxfoundation.org> (raw)
In-Reply-To: <20260312201018.128816016@linuxfoundation.org>

6.12-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Baokun Li <libaokun1@huawei.com>

[ Upstream commit 6347558764911f88acac06ab996e162f0c8a212d ]

This commit converts the `choose group` logic to `scan group` using
previously prepared helper functions. This allows us to leverage xarrays
for ordered non-linear traversal, thereby mitigating the "bouncing" issue
inherent in the `choose group` mechanism.

This also decouples linear and non-linear traversals, leading to cleaner
and more readable code.

Key changes:

 * ext4_mb_choose_next_group() is refactored to ext4_mb_scan_groups().

 * Replaced ext4_mb_good_group() with ext4_mb_scan_group() in non-linear
   traversals, and related functions now return error codes instead of
   group info.

 * Added ext4_mb_scan_groups_linear() for performing linear scans starting
   from a specific group for a set number of times.

 * Linear scans now execute up to sbi->s_mb_max_linear_groups times,
   so ac_groups_linear_remaining is removed as it's no longer used.

 * ac->ac_criteria is now used directly instead of passing cr around.
   Also, ac->ac_criteria is incremented directly after groups scan fails
   for the corresponding criteria.

 * Since we're now directly scanning groups instead of finding a good group
   then scanning, the following variables and flags are no longer needed,
   s_bal_cX_groups_considered is sufficient.

    s_bal_p2_aligned_bad_suggestions
    s_bal_goal_fast_bad_suggestions
    s_bal_best_avail_bad_suggestions
    EXT4_MB_CR_POWER2_ALIGNED_OPTIMIZED
    EXT4_MB_CR_GOAL_LEN_FAST_OPTIMIZED
    EXT4_MB_CR_BEST_AVAIL_LEN_OPTIMIZED

Signed-off-by: Baokun Li <libaokun1@huawei.com>
Reviewed-by: Zhang Yi <yi.zhang@huawei.com>
Link: https://patch.msgid.link/20250714130327.1830534-17-libaokun1@huawei.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Stable-dep-of: 4865c768b563 ("ext4: always allocate blocks only from groups inode can use")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 fs/ext4/ext4.h    |  12 --
 fs/ext4/mballoc.c | 292 +++++++++++++++++++++-------------------------
 fs/ext4/mballoc.h |   1 -
 3 files changed, 131 insertions(+), 174 deletions(-)

diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
index 7cfe38fdb9950..bcdd8f3818696 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -213,15 +213,6 @@ enum criteria {
 #define EXT4_MB_USE_RESERVED		0x2000
 /* Do strict check for free blocks while retrying block allocation */
 #define EXT4_MB_STRICT_CHECK		0x4000
-/* Large fragment size list lookup succeeded at least once for
- * CR_POWER2_ALIGNED */
-#define EXT4_MB_CR_POWER2_ALIGNED_OPTIMIZED		0x8000
-/* Avg fragment size rb tree lookup succeeded at least once for
- * CR_GOAL_LEN_FAST */
-#define EXT4_MB_CR_GOAL_LEN_FAST_OPTIMIZED		0x00010000
-/* Avg fragment size rb tree lookup succeeded at least once for
- * CR_BEST_AVAIL_LEN */
-#define EXT4_MB_CR_BEST_AVAIL_LEN_OPTIMIZED		0x00020000
 
 struct ext4_allocation_request {
 	/* target inode for block we're allocating */
@@ -1619,9 +1610,6 @@ struct ext4_sb_info {
 	atomic_t s_bal_len_goals;	/* len goal hits */
 	atomic_t s_bal_breaks;	/* too long searches */
 	atomic_t s_bal_2orders;	/* 2^order hits */
-	atomic_t s_bal_p2_aligned_bad_suggestions;
-	atomic_t s_bal_goal_fast_bad_suggestions;
-	atomic_t s_bal_best_avail_bad_suggestions;
 	atomic64_t s_bal_cX_groups_considered[EXT4_MB_NUM_CRS];
 	atomic64_t s_bal_cX_hits[EXT4_MB_NUM_CRS];
 	atomic64_t s_bal_cX_failed[EXT4_MB_NUM_CRS];		/* cX loop didn't find blocks */
diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
index 719a8cb53ae4c..6c72eddcd6c1f 100644
--- a/fs/ext4/mballoc.c
+++ b/fs/ext4/mballoc.c
@@ -425,8 +425,8 @@ static void ext4_mb_generate_from_pa(struct super_block *sb, void *bitmap,
 					ext4_group_t group);
 static void ext4_mb_new_preallocation(struct ext4_allocation_context *ac);
 
-static bool ext4_mb_good_group(struct ext4_allocation_context *ac,
-			       ext4_group_t group, enum criteria cr);
+static int ext4_mb_scan_group(struct ext4_allocation_context *ac,
+			      ext4_group_t group);
 
 static int ext4_try_to_trim_range(struct super_block *sb,
 		struct ext4_buddy *e4b, ext4_grpblk_t start,
@@ -892,9 +892,8 @@ mb_update_avg_fragment_size(struct super_block *sb, struct ext4_group_info *grp)
 	}
 }
 
-static struct ext4_group_info *
-ext4_mb_find_good_group_xarray(struct ext4_allocation_context *ac,
-			       struct xarray *xa, ext4_group_t start)
+static int ext4_mb_scan_groups_xarray(struct ext4_allocation_context *ac,
+				      struct xarray *xa, ext4_group_t start)
 {
 	struct super_block *sb = ac->ac_sb;
 	struct ext4_sb_info *sbi = EXT4_SB(sb);
@@ -905,16 +904,18 @@ ext4_mb_find_good_group_xarray(struct ext4_allocation_context *ac,
 	struct ext4_group_info *grp;
 
 	if (WARN_ON_ONCE(start >= end))
-		return NULL;
+		return 0;
 
 wrap_around:
 	xa_for_each_range(xa, group, grp, start, end - 1) {
+		int err;
+
 		if (sbi->s_mb_stats)
 			atomic64_inc(&sbi->s_bal_cX_groups_considered[cr]);
 
-		if (!spin_is_locked(ext4_group_lock_ptr(sb, group)) &&
-		    likely(ext4_mb_good_group(ac, group, cr)))
-			return grp;
+		err = ext4_mb_scan_group(ac, grp->bb_group);
+		if (err || ac->ac_status != AC_STATUS_CONTINUE)
+			return err;
 
 		cond_resched();
 	}
@@ -925,95 +926,82 @@ ext4_mb_find_good_group_xarray(struct ext4_allocation_context *ac,
 		goto wrap_around;
 	}
 
-	return NULL;
+	return 0;
 }
 
 /*
  * Find a suitable group of given order from the largest free orders xarray.
  */
-static struct ext4_group_info *
-ext4_mb_find_good_group_largest_free_order(struct ext4_allocation_context *ac,
-					   int order, ext4_group_t start)
+static int
+ext4_mb_scan_groups_largest_free_order(struct ext4_allocation_context *ac,
+				       int order, ext4_group_t start)
 {
 	struct xarray *xa = &EXT4_SB(ac->ac_sb)->s_mb_largest_free_orders[order];
 
 	if (xa_empty(xa))
-		return NULL;
+		return 0;
 
-	return ext4_mb_find_good_group_xarray(ac, xa, start);
+	return ext4_mb_scan_groups_xarray(ac, xa, start);
 }
 
 /*
  * Choose next group by traversing largest_free_order lists. Updates *new_cr if
  * cr level needs an update.
  */
-static void ext4_mb_choose_next_group_p2_aligned(struct ext4_allocation_context *ac,
-			enum criteria *new_cr, ext4_group_t *group)
+static int ext4_mb_scan_groups_p2_aligned(struct ext4_allocation_context *ac,
+					  ext4_group_t group)
 {
 	struct ext4_sb_info *sbi = EXT4_SB(ac->ac_sb);
-	struct ext4_group_info *grp;
 	int i;
-
-	if (ac->ac_status == AC_STATUS_FOUND)
-		return;
-
-	if (unlikely(sbi->s_mb_stats && ac->ac_flags & EXT4_MB_CR_POWER2_ALIGNED_OPTIMIZED))
-		atomic_inc(&sbi->s_bal_p2_aligned_bad_suggestions);
+	int ret = 0;
 
 	for (i = ac->ac_2order; i < MB_NUM_ORDERS(ac->ac_sb); i++) {
-		grp = ext4_mb_find_good_group_largest_free_order(ac, i, *group);
-		if (grp) {
-			*group = grp->bb_group;
-			ac->ac_flags |= EXT4_MB_CR_POWER2_ALIGNED_OPTIMIZED;
-			return;
-		}
+		ret = ext4_mb_scan_groups_largest_free_order(ac, i, group);
+		if (ret || ac->ac_status != AC_STATUS_CONTINUE)
+			return ret;
 	}
 
+	if (sbi->s_mb_stats)
+		atomic64_inc(&sbi->s_bal_cX_failed[ac->ac_criteria]);
+
 	/* Increment cr and search again if no group is found */
-	*new_cr = CR_GOAL_LEN_FAST;
+	ac->ac_criteria = CR_GOAL_LEN_FAST;
+	return ret;
 }
 
 /*
  * Find a suitable group of given order from the average fragments xarray.
  */
-static struct ext4_group_info *
-ext4_mb_find_good_group_avg_frag_xarray(struct ext4_allocation_context *ac,
-					int order, ext4_group_t start)
+static int ext4_mb_scan_groups_avg_frag_order(struct ext4_allocation_context *ac,
+					      int order, ext4_group_t start)
 {
 	struct xarray *xa = &EXT4_SB(ac->ac_sb)->s_mb_avg_fragment_size[order];
 
 	if (xa_empty(xa))
-		return NULL;
+		return 0;
 
-	return ext4_mb_find_good_group_xarray(ac, xa, start);
+	return ext4_mb_scan_groups_xarray(ac, xa, start);
 }
 
 /*
  * Choose next group by traversing average fragment size list of suitable
  * order. Updates *new_cr if cr level needs an update.
  */
-static void ext4_mb_choose_next_group_goal_fast(struct ext4_allocation_context *ac,
-		enum criteria *new_cr, ext4_group_t *group)
+static int ext4_mb_scan_groups_goal_fast(struct ext4_allocation_context *ac,
+					 ext4_group_t group)
 {
 	struct ext4_sb_info *sbi = EXT4_SB(ac->ac_sb);
-	struct ext4_group_info *grp = NULL;
-	int i;
+	int i, ret = 0;
 
-	if (unlikely(ac->ac_flags & EXT4_MB_CR_GOAL_LEN_FAST_OPTIMIZED)) {
-		if (sbi->s_mb_stats)
-			atomic_inc(&sbi->s_bal_goal_fast_bad_suggestions);
-	}
-
-	for (i = mb_avg_fragment_size_order(ac->ac_sb, ac->ac_g_ex.fe_len);
-	     i < MB_NUM_ORDERS(ac->ac_sb); i++) {
-		grp = ext4_mb_find_good_group_avg_frag_xarray(ac, i, *group);
-		if (grp) {
-			*group = grp->bb_group;
-			ac->ac_flags |= EXT4_MB_CR_GOAL_LEN_FAST_OPTIMIZED;
-			return;
-		}
+	i = mb_avg_fragment_size_order(ac->ac_sb, ac->ac_g_ex.fe_len);
+	for (; i < MB_NUM_ORDERS(ac->ac_sb); i++) {
+		ret = ext4_mb_scan_groups_avg_frag_order(ac, i, group);
+		if (ret || ac->ac_status != AC_STATUS_CONTINUE)
+			return ret;
 	}
 
+	if (sbi->s_mb_stats)
+		atomic64_inc(&sbi->s_bal_cX_failed[ac->ac_criteria]);
 	/*
 	 * CR_BEST_AVAIL_LEN works based on the concept that we have
 	 * a larger normalized goal len request which can be trimmed to
@@ -1023,9 +1011,11 @@ static void ext4_mb_choose_next_group_goal_fast(struct ext4_allocation_context *
 	 * See function ext4_mb_normalize_request() (EXT4_MB_HINT_DATA).
 	 */
 	if (ac->ac_flags & EXT4_MB_HINT_DATA)
-		*new_cr = CR_BEST_AVAIL_LEN;
+		ac->ac_criteria = CR_BEST_AVAIL_LEN;
 	else
-		*new_cr = CR_GOAL_LEN_SLOW;
+		ac->ac_criteria = CR_GOAL_LEN_SLOW;
+
+	return ret;
 }
 
 /*
@@ -1037,19 +1027,14 @@ static void ext4_mb_choose_next_group_goal_fast(struct ext4_allocation_context *
  * preallocations. However, we make sure that we don't trim the request too
  * much and fall to CR_GOAL_LEN_SLOW in that case.
  */
-static void ext4_mb_choose_next_group_best_avail(struct ext4_allocation_context *ac,
-		enum criteria *new_cr, ext4_group_t *group)
+static int ext4_mb_scan_groups_best_avail(struct ext4_allocation_context *ac,
+					  ext4_group_t group)
 {
+	int ret = 0;
 	struct ext4_sb_info *sbi = EXT4_SB(ac->ac_sb);
-	struct ext4_group_info *grp = NULL;
 	int i, order, min_order;
 	unsigned long num_stripe_clusters = 0;
 
-	if (unlikely(ac->ac_flags & EXT4_MB_CR_BEST_AVAIL_LEN_OPTIMIZED)) {
-		if (sbi->s_mb_stats)
-			atomic_inc(&sbi->s_bal_best_avail_bad_suggestions);
-	}
-
 	/*
 	 * mb_avg_fragment_size_order() returns order in a way that makes
 	 * retrieving back the length using (1 << order) inaccurate. Hence, use
@@ -1102,18 +1087,18 @@ static void ext4_mb_choose_next_group_best_avail(struct ext4_allocation_context
 		frag_order = mb_avg_fragment_size_order(ac->ac_sb,
 							ac->ac_g_ex.fe_len);
 
-		grp = ext4_mb_find_good_group_avg_frag_xarray(ac, frag_order,
-							      *group);
-		if (grp) {
-			*group = grp->bb_group;
-			ac->ac_flags |= EXT4_MB_CR_BEST_AVAIL_LEN_OPTIMIZED;
-			return;
-		}
+		ret = ext4_mb_scan_groups_avg_frag_order(ac, frag_order, group);
+		if (ret || ac->ac_status != AC_STATUS_CONTINUE)
+			return ret;
 	}
 
 	/* Reset goal length to original goal length before falling into CR_GOAL_LEN_SLOW */
 	ac->ac_g_ex.fe_len = ac->ac_orig_goal_len;
-	*new_cr = CR_GOAL_LEN_SLOW;
+	if (sbi->s_mb_stats)
+		atomic64_inc(&sbi->s_bal_cX_failed[ac->ac_criteria]);
+	ac->ac_criteria = CR_GOAL_LEN_SLOW;
+
+	return ret;
 }
 
 static inline int should_optimize_scan(struct ext4_allocation_context *ac)
@@ -1126,59 +1111,82 @@ static inline int should_optimize_scan(struct ext4_allocation_context *ac)
 }
 
 /*
- * Return next linear group for allocation.
+ * next linear group for allocation.
  */
-static ext4_group_t
-next_linear_group(ext4_group_t group, ext4_group_t ngroups)
+static void next_linear_group(ext4_group_t *group, ext4_group_t ngroups)
 {
 	/*
 	 * Artificially restricted ngroups for non-extent
 	 * files makes group > ngroups possible on first loop.
 	 */
-	return group + 1 >= ngroups ? 0 : group + 1;
+	*group =  *group + 1 >= ngroups ? 0 : *group + 1;
 }
 
-/*
- * ext4_mb_choose_next_group: choose next group for allocation.
- *
- * @ac        Allocation Context
- * @new_cr    This is an output parameter. If the there is no good group
- *            available at current CR level, this field is updated to indicate
- *            the new cr level that should be used.
- * @group     This is an input / output parameter. As an input it indicates the
- *            next group that the allocator intends to use for allocation. As
- *            output, this field indicates the next group that should be used as
- *            determined by the optimization functions.
- * @ngroups   Total number of groups
- */
-static void ext4_mb_choose_next_group(struct ext4_allocation_context *ac,
-		enum criteria *new_cr, ext4_group_t *group, ext4_group_t ngroups)
+static int ext4_mb_scan_groups_linear(struct ext4_allocation_context *ac,
+		ext4_group_t ngroups, ext4_group_t *start, ext4_group_t count)
 {
-	*new_cr = ac->ac_criteria;
+	int ret, i;
+	enum criteria cr = ac->ac_criteria;
+	struct super_block *sb = ac->ac_sb;
+	struct ext4_sb_info *sbi = EXT4_SB(sb);
+	ext4_group_t group = *start;
 
-	if (!should_optimize_scan(ac)) {
-		*group = next_linear_group(*group, ngroups);
-		return;
+	for (i = 0; i < count; i++, next_linear_group(&group, ngroups)) {
+		ret = ext4_mb_scan_group(ac, group);
+		if (ret || ac->ac_status != AC_STATUS_CONTINUE)
+			return ret;
+		cond_resched();
 	}
 
+	*start = group;
+	if (count == ngroups)
+		ac->ac_criteria++;
+
+	/* Processed all groups and haven't found blocks */
+	if (sbi->s_mb_stats && i == ngroups)
+		atomic64_inc(&sbi->s_bal_cX_failed[cr]);
+
+	return 0;
+}
+
+static int ext4_mb_scan_groups(struct ext4_allocation_context *ac)
+{
+	int ret = 0;
+	ext4_group_t start;
+	struct ext4_sb_info *sbi = EXT4_SB(ac->ac_sb);
+	ext4_group_t ngroups = ext4_get_groups_count(ac->ac_sb);
+
+	/* non-extent files are limited to low blocks/groups */
+	if (!(ext4_test_inode_flag(ac->ac_inode, EXT4_INODE_EXTENTS)))
+		ngroups = sbi->s_blockfile_groups;
+
+	/* searching for the right group start from the goal value specified */
+	start = ac->ac_g_ex.fe_group;
+	ac->ac_prefetch_grp = start;
+	ac->ac_prefetch_nr = 0;
+
+	if (!should_optimize_scan(ac))
+		return ext4_mb_scan_groups_linear(ac, ngroups, &start, ngroups);
+
 	/*
 	 * Optimized scanning can return non adjacent groups which can cause
 	 * seek overhead for rotational disks. So try few linear groups before
 	 * trying optimized scan.
 	 */
-	if (ac->ac_groups_linear_remaining) {
-		*group = next_linear_group(*group, ngroups);
-		ac->ac_groups_linear_remaining--;
-		return;
-	}
+	if (sbi->s_mb_max_linear_groups)
+		ret = ext4_mb_scan_groups_linear(ac, ngroups, &start,
+						 sbi->s_mb_max_linear_groups);
+	if (ret || ac->ac_status != AC_STATUS_CONTINUE)
+		return ret;
 
-	if (*new_cr == CR_POWER2_ALIGNED) {
-		ext4_mb_choose_next_group_p2_aligned(ac, new_cr, group);
-	} else if (*new_cr == CR_GOAL_LEN_FAST) {
-		ext4_mb_choose_next_group_goal_fast(ac, new_cr, group);
-	} else if (*new_cr == CR_BEST_AVAIL_LEN) {
-		ext4_mb_choose_next_group_best_avail(ac, new_cr, group);
-	} else {
+	switch (ac->ac_criteria) {
+	case CR_POWER2_ALIGNED:
+		return ext4_mb_scan_groups_p2_aligned(ac, start);
+	case CR_GOAL_LEN_FAST:
+		return ext4_mb_scan_groups_goal_fast(ac, start);
+	case CR_BEST_AVAIL_LEN:
+		return ext4_mb_scan_groups_best_avail(ac, start);
+	default:
 		/*
 		 * TODO: For CR_GOAL_LEN_SLOW, we can arrange groups in an
 		 * rb tree sorted by bb_free. But until that happens, we should
@@ -1186,6 +1194,8 @@ static void ext4_mb_choose_next_group(struct ext4_allocation_context *ac,
 		 */
 		WARN_ON(1);
 	}
+
+	return 0;
 }
 
 /*
@@ -2944,20 +2954,11 @@ static int ext4_mb_scan_group(struct ext4_allocation_context *ac,
 static noinline_for_stack int
 ext4_mb_regular_allocator(struct ext4_allocation_context *ac)
 {
-	ext4_group_t ngroups, group, i;
-	enum criteria new_cr, cr = CR_GOAL_LEN_FAST;
+	ext4_group_t i;
 	int err = 0;
-	struct ext4_sb_info *sbi;
-	struct super_block *sb;
+	struct super_block *sb = ac->ac_sb;
+	struct ext4_sb_info *sbi = EXT4_SB(sb);
 	struct ext4_buddy e4b;
-	int lost;
-
-	sb = ac->ac_sb;
-	sbi = EXT4_SB(sb);
-	ngroups = ext4_get_groups_count(sb);
-	/* non-extent files are limited to low blocks/groups */
-	if (!(ext4_test_inode_flag(ac->ac_inode, EXT4_INODE_EXTENTS)))
-		ngroups = sbi->s_blockfile_groups;
 
 	BUG_ON(ac->ac_status == AC_STATUS_FOUND);
 
@@ -3003,48 +3004,21 @@ ext4_mb_regular_allocator(struct ext4_allocation_context *ac)
 	 * start with CR_GOAL_LEN_FAST, unless it is power of 2
 	 * aligned, in which case let's do that faster approach first.
 	 */
+	ac->ac_criteria = CR_GOAL_LEN_FAST;
 	if (ac->ac_2order)
-		cr = CR_POWER2_ALIGNED;
+		ac->ac_criteria = CR_POWER2_ALIGNED;
 
 	ac->ac_e4b = &e4b;
 	ac->ac_prefetch_ios = 0;
 	ac->ac_first_err = 0;
 repeat:
-	for (; cr < EXT4_MB_NUM_CRS && ac->ac_status == AC_STATUS_CONTINUE; cr++) {
-		ac->ac_criteria = cr;
-		/*
-		 * searching for the right group start
-		 * from the goal value specified
-		 */
-		group = ac->ac_g_ex.fe_group;
-		ac->ac_groups_linear_remaining = sbi->s_mb_max_linear_groups;
-		ac->ac_prefetch_grp = group;
-		ac->ac_prefetch_nr = 0;
-
-		for (i = 0, new_cr = cr; i < ngroups; i++,
-		     ext4_mb_choose_next_group(ac, &new_cr, &group, ngroups)) {
-
-			cond_resched();
-			if (new_cr != cr) {
-				cr = new_cr;
-				goto repeat;
-			}
-
-			err = ext4_mb_scan_group(ac, group);
-			if (err)
-				goto out;
-
-			if (ac->ac_status != AC_STATUS_CONTINUE)
-				break;
-		}
-		/* Processed all groups and haven't found blocks */
-		if (sbi->s_mb_stats && i == ngroups)
-			atomic64_inc(&sbi->s_bal_cX_failed[cr]);
+	while (ac->ac_criteria < EXT4_MB_NUM_CRS) {
+		err = ext4_mb_scan_groups(ac);
+		if (err)
+			goto out;
 
-		if (i == ngroups && ac->ac_criteria == CR_BEST_AVAIL_LEN)
-			/* Reset goal length to original goal length before
-			 * falling into CR_GOAL_LEN_SLOW */
-			ac->ac_g_ex.fe_len = ac->ac_orig_goal_len;
+		if (ac->ac_status != AC_STATUS_CONTINUE)
+			break;
 	}
 
 	if (ac->ac_b_ex.fe_len > 0 && ac->ac_status != AC_STATUS_FOUND &&
@@ -3055,6 +3029,8 @@ ext4_mb_regular_allocator(struct ext4_allocation_context *ac)
 		 */
 		ext4_mb_try_best_found(ac, &e4b);
 		if (ac->ac_status != AC_STATUS_FOUND) {
+			int lost;
+
 			/*
 			 * Someone more lucky has already allocated it.
 			 * The only thing we can do is just take first
@@ -3070,7 +3046,7 @@ ext4_mb_regular_allocator(struct ext4_allocation_context *ac)
 			ac->ac_b_ex.fe_len = 0;
 			ac->ac_status = AC_STATUS_CONTINUE;
 			ac->ac_flags |= EXT4_MB_HINT_FIRST;
-			cr = CR_ANY_FREE;
+			ac->ac_criteria = CR_ANY_FREE;
 			goto repeat;
 		}
 	}
@@ -3083,7 +3059,7 @@ ext4_mb_regular_allocator(struct ext4_allocation_context *ac)
 
 	mb_debug(sb, "Best len %d, origin len %d, ac_status %u, ac_flags 0x%x, cr %d ret %d\n",
 		 ac->ac_b_ex.fe_len, ac->ac_o_ex.fe_len, ac->ac_status,
-		 ac->ac_flags, cr, err);
+		 ac->ac_flags, ac->ac_criteria, err);
 
 	if (ac->ac_prefetch_nr)
 		ext4_mb_prefetch_fini(sb, ac->ac_prefetch_grp, ac->ac_prefetch_nr);
@@ -3211,8 +3187,6 @@ int ext4_seq_mb_stats_show(struct seq_file *seq, void *offset)
 		   atomic_read(&sbi->s_bal_cX_ex_scanned[CR_POWER2_ALIGNED]));
 	seq_printf(seq, "\t\tuseless_loops: %llu\n",
 		   atomic64_read(&sbi->s_bal_cX_failed[CR_POWER2_ALIGNED]));
-	seq_printf(seq, "\t\tbad_suggestions: %u\n",
-		   atomic_read(&sbi->s_bal_p2_aligned_bad_suggestions));
 
 	/* CR_GOAL_LEN_FAST stats */
 	seq_puts(seq, "\tcr_goal_fast_stats:\n");
@@ -3225,8 +3199,6 @@ int ext4_seq_mb_stats_show(struct seq_file *seq, void *offset)
 		   atomic_read(&sbi->s_bal_cX_ex_scanned[CR_GOAL_LEN_FAST]));
 	seq_printf(seq, "\t\tuseless_loops: %llu\n",
 		   atomic64_read(&sbi->s_bal_cX_failed[CR_GOAL_LEN_FAST]));
-	seq_printf(seq, "\t\tbad_suggestions: %u\n",
-		   atomic_read(&sbi->s_bal_goal_fast_bad_suggestions));
 
 	/* CR_BEST_AVAIL_LEN stats */
 	seq_puts(seq, "\tcr_best_avail_stats:\n");
@@ -3240,8 +3212,6 @@ int ext4_seq_mb_stats_show(struct seq_file *seq, void *offset)
 		   atomic_read(&sbi->s_bal_cX_ex_scanned[CR_BEST_AVAIL_LEN]));
 	seq_printf(seq, "\t\tuseless_loops: %llu\n",
 		   atomic64_read(&sbi->s_bal_cX_failed[CR_BEST_AVAIL_LEN]));
-	seq_printf(seq, "\t\tbad_suggestions: %u\n",
-		   atomic_read(&sbi->s_bal_best_avail_bad_suggestions));
 
 	/* CR_GOAL_LEN_SLOW stats */
 	seq_puts(seq, "\tcr_goal_slow_stats:\n");
diff --git a/fs/ext4/mballoc.h b/fs/ext4/mballoc.h
index 83886fc9521b7..15a049f05d04a 100644
--- a/fs/ext4/mballoc.h
+++ b/fs/ext4/mballoc.h
@@ -199,7 +199,6 @@ struct ext4_allocation_context {
 	int ac_first_err;
 
 	__u32 ac_flags;		/* allocation hints */
-	__u32 ac_groups_linear_remaining;
 	__u16 ac_groups_scanned;
 	__u16 ac_found;
 	__u16 ac_cX_found[EXT4_MB_NUM_CRS];
-- 
2.51.0




  parent reply	other threads:[~2026-03-12 20:16 UTC|newest]

Thread overview: 289+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-12 20:06 [PATCH 6.12 000/265] 6.12.77-rc1 review Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 001/265] drm/vmwgfx: Fix invalid kref_put callback in vmw_bo_dirty_release Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 002/265] drm/vmwgfx: Return the correct value in vmw_translate_ptr functions Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 003/265] drm/logicvc: Fix device node reference leak in logicvc_drm_config_parse() Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 004/265] KVM: arm64: Advertise support for FEAT_SCTLR2 Greg Kroah-Hartman
2026-03-12 20:26   ` Marc Zyngier
2026-03-13 16:02     ` Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 005/265] KVM: arm64: Hide S1POE from guests when not supported by the host Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 006/265] irqchip/sifive-plic: Fix frozen interrupt due to affinity setting Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 007/265] scsi: lpfc: Properly set WC for DPP mapping Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 008/265] scsi: pm8001: Fix use-after-free in pm8001_queue_command() Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 009/265] ALSA: scarlett2: Fix redeclaration of loop variable Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 010/265] ALSA: scarlett2: Fix DSP filter control array handling Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 011/265] ALSA: usb-audio: Remove VALIDATE_RATES quirk for Focusrite devices Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 012/265] x86/fred: Correct speculative safety in fred_extint() Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 013/265] sched/fair: Fix EEVDF entity placement bug causing scheduling lag Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 014/265] sched/fair: Fix lag clamp Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 015/265] rseq: Clarify rseq registration rseq_size bound check comment Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 016/265] cgroup/cpuset: Fix incorrect use of cpuset_update_tasks_cpumask() in update_cpumasks_hier() Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 017/265] scsi: ufs: core: Move link recovery for hibern8 exit failure to wl_resume Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 018/265] ALSA: usb-audio: Cap the packet size pre-calculations Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 019/265] ALSA: usb-audio: Use inclusive terms Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 020/265] perf: Fix __perf_event_overflow() vs perf_remove_from_context() race Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 021/265] s390/idle: Fix cpu idle exit cpu time accounting Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 022/265] s390/vtime: Fix virtual timer forwarding Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 023/265] PCI: endpoint: Introduce pci_epc_function_is_valid() Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 024/265] PCI: endpoint: Introduce pci_epc_mem_map()/unmap() Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 025/265] PCI: dwc: endpoint: Implement the pci_epc_ops::align_addr() operation Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 026/265] PCI: dwc: ep: Use align addr function for dw_pcie_ep_raise_{msi,msix}_irq() Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 027/265] PCI: dwc: ep: Flush MSI-X write before unmapping its ATU entry Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 028/265] drm/amdgpu: Unlock a mutex before destroying it Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 029/265] drm/amdgpu: Replace kzalloc + copy_from_user with memdup_user Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 030/265] drm/amdgpu: Fix locking bugs in error paths Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 031/265] ALSA: pci: hda: use snd_kcontrol_chip() Greg Kroah-Hartman
2026-03-12 20:06 ` [PATCH 6.12 032/265] ALSA: hda: cs35l56: Fix signedness error in cs35l56_hda_posture_put() Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 033/265] btrfs: fix incorrect key offset in error message in check_dev_extent_item() Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 034/265] btrfs: fix objectid value in error message in check_extent_data_ref() Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 035/265] btrfs: fix warning in scrub_verify_one_metadata() Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 036/265] btrfs: print correct subvol num if active swapfile prevents deletion Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 037/265] btrfs: fix compat mask in error messages in btrfs_check_features() Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 038/265] bpf, arm64: Force 8-byte alignment for JIT buffer to prevent atomic tearing Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 039/265] bpf: Fix stack-out-of-bounds write in devmap Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 040/265] PCI: Correct PCI_CAP_EXP_ENDPOINT_SIZEOF_V2 value Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 041/265] x86/acpi/boot: Correct acpi_is_processor_usable() check again Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 042/265] memory: mtk-smi: fix device leaks on common probe Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 043/265] memory: mtk-smi: fix device leak on larb probe Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 044/265] PCI: dw-rockchip: Dont wait for link since we can detect Link Up Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 045/265] Revert "PCI: dw-rockchip: Dont wait for link since we can detect Link Up" Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 046/265] PCI: qcom: Dont wait for link if we can detect Link Up Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 047/265] Revert "PCI: qcom: Dont wait for link if we can detect Link Up" Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 048/265] resource: Add resource set range and size helpers Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 049/265] PCI: Use resource_set_range() that correctly sets ->end Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 050/265] media: tegra-video: Fix memory leak in __tegra_channel_try_format() Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 051/265] media: dw9714: move power sequences to dedicated functions Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 052/265] media: dw9714: add support for powerdown pin Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 053/265] media: dw9714: Fix powerup sequence Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 054/265] KVM: x86: Ignore -EBUSY when checking nested events from vcpu_block() Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 055/265] ata: libata-scsi: Refactor ata_scsi_simulate() Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 056/265] ata: libata-scsi: Refactor ata_scsiop_read_cap() Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 057/265] ata: libata-scsi: Refactor ata_scsiop_maint_in() Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 058/265] ata: libata-scsi: Document all VPD page inquiry actors Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 059/265] ata: libata-scsi: Remove struct ata_scsi_args Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 060/265] ata: libata: Remove ATA_DFLAG_ZAC device flag Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 061/265] ata: libata: Introduce ata_port_eh_scheduled() Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 062/265] ata: libata-scsi: avoid Non-NCQ command starvation Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 063/265] drm/tegra: dsi: fix device leak on probe Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 064/265] ext4: correct the comments place for EXT4_EXT_MAY_ZEROOUT Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 065/265] ext4: dont set EXT4_GET_BLOCKS_CONVERT when splitting before submitting I/O Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 066/265] mailbox: dont protect of_parse_phandle_with_args with con_mutex Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 067/265] mailbox: sort headers alphabetically Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 068/265] mailbox: remove unused header files Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 069/265] mailbox: Use dev_err when there is error Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 070/265] mailbox: Use guard/scoped_guard for con_mutex Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 071/265] mailbox: Allow controller specific mapping using fwnode Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 072/265] mailbox: Prevent out-of-bounds access in fw_mbox_index_xlate() Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 073/265] ext4: add ext4_try_lock_group() to skip busy groups Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 074/265] ext4: factor out __ext4_mb_scan_group() Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 075/265] ext4: factor out ext4_mb_might_prefetch() Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 076/265] ext4: factor out ext4_mb_scan_group() Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 077/265] ext4: convert free groups order lists to xarrays Greg Kroah-Hartman
2026-03-12 20:07 ` Greg Kroah-Hartman [this message]
2026-03-12 20:07 ` [PATCH 6.12 079/265] ext4: implement linear-like traversal across order xarrays Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 080/265] ext4: always allocate blocks only from groups inode can use Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 081/265] workqueue: Add system_percpu_wq and system_dfl_wq Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 082/265] Input: synaptics_i2c - replace use of system_wq with system_dfl_wq Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 083/265] Input: synaptics_i2c - guard polling restart in resume Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 084/265] iommu/vt-d: Skip dev-iotlb flush for inaccessible PCIe device without scalable mode Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 085/265] arm64: dts: rockchip: Fix rk356x PCIe range mappings Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 086/265] arm64: dts: rockchip: Fix rk3588 " Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 087/265] clk: tegra: tegra124-emc: fix device leak on set_rate() Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 088/265] ima: kexec: silence RCU list traversal warning Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 089/265] ima: rename variable the seq_file "file" to "ima_kexec_file" Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 090/265] ima: define and call ima_alloc_kexec_file_buf() Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 091/265] kexec: define functions to map and unmap segments Greg Kroah-Hartman
2026-03-12 20:07 ` [PATCH 6.12 092/265] ima: kexec: define functions to copy IMA log at soft boot Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 093/265] ima: verify the previous kernels IMA buffer lies in addressable RAM Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 094/265] of/kexec: refactor ima_get_kexec_buffer() to use ima_validate_range() Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 095/265] drm/exynos: vidi: fix to avoid directly dereferencing user pointer Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 096/265] drm/exynos/vidi: Remove redundant error handling in vidi_get_modes() Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 097/265] drm/exynos: vidi: use ctx->lock to protect struct vidi_context member variables related to memory alloc/free Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 098/265] uprobes: switch to RCU Tasks Trace flavor for better performance Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 099/265] uprobes: Fix incorrect lockdep condition in filter_chain() Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 100/265] btrfs: drop unused parameter fs_info from do_reclaim_sweep() Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 101/265] btrfs: get used bytes while holding lock at btrfs_reclaim_bgs_work() Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 102/265] btrfs: fix reclaimed bytes accounting after automatic block group reclaim Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 103/265] btrfs: fix periodic reclaim condition Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 104/265] btrfs: zoned: fix alloc_offset calculation for partly conventional block groups Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 105/265] btrfs: zoned: fixup last alloc pointer after extent removal for RAID1 Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 106/265] btrfs: zoned: fixup last alloc pointer after extent removal for DUP Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 107/265] btrfs: zoned: fix stripe width calculation Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 108/265] btrfs: define the AUTO_KFREE/AUTO_KVFREE helper macros Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 109/265] btrfs: zoned: fixup last alloc pointer after extent removal for RAID0/10 Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 110/265] usb: cdns3: remove redundant if branch Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 111/265] usb: cdns3: call cdns_power_is_lost() only once in cdns_resume() Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 112/265] usb: cdns3: fix role switching during resume Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 113/265] drm/amd: Fix hang on amdgpu unload by using pci_dev_is_disconnected() Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 114/265] ALSA: hda/conexant: Add quirk for HP ZBook Studio G4 Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 115/265] hwmon: (max16065) Use READ/WRITE_ONCE to avoid compiler optimization induced race Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 116/265] ksmbd: check return value of xa_store() in krb5_authenticate Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 117/265] ksmbd: add chann_lock to protect ksmbd_chann_list xarray Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 118/265] LoongArch/orc: Use RCU in all users of __module_address() Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 119/265] LoongArch: Remove unnecessary checks for ORC unwinder Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 120/265] LoongArch: Handle percpu handler address " Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 121/265] LoongArch: Remove some extern variables in source files Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 122/265] ALSA: hda/realtek: Add quirk for Gigabyte G5 KF5 (2023) Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 123/265] ALSA: hda/realtek: Add quirk for Samsung Galaxy Book3 Pro 360 (NP965QFG) Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 124/265] ALSA: hda/conexant: Fix headphone jack handling on Acer Swift SF314 Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 125/265] net: arcnet: com20020-pci: fix support for 2.5Mbit cards Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 126/265] eventpoll: Fix integer overflow in ep_loop_check_proc() Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 127/265] namespace: fix proc mount iteration Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 128/265] media: dvb-core: fix wrong reinitialization of ringbuffer on reopen Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 129/265] nfc: pn533: properly drop the usb interface reference on disconnect Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 130/265] net: usb: kaweth: validate USB endpoints Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 131/265] net: usb: kalmia: " Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 132/265] net: usb: pegasus: " Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 133/265] can: ems_usb: ems_usb_read_bulk_callback(): check the proper length of a message Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 134/265] can: usb: f81604: correctly anchor the urb in the read bulk callback Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 135/265] can: ucan: Fix infinite loop from zero-length messages Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 136/265] can: usb: etas_es58x: correctly anchor the urb in the read bulk callback Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 137/265] can: usb: f81604: handle short interrupt urb messages properly Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 138/265] can: usb: f81604: handle bulk write errors properly Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 139/265] HID: Add HID_CLAIMED_INPUT guards in raw_event callbacks missing them Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 140/265] x86/efi: defer freeing of boot services memory Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 141/265] platform/x86: dell-wmi-sysman: Dont hex dump plaintext password data Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 142/265] platform/x86: dell-wmi: Add audio/mic mute key codes Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 143/265] ALSA: usb-audio: Use correct version for UAC3 header validation Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 144/265] wifi: radiotap: reject radiotap with unknown bits Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 145/265] wifi: cfg80211: cancel rfkill_block work in wiphy_unregister() Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 146/265] wifi: mac80211: bounds-check link_id in ieee80211_ml_reconfiguration Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 147/265] wifi: mac80211: fix NULL pointer dereference in mesh_rx_csa_frame() Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 148/265] IB/mthca: Add missed mthca_unmap_user_db() for mthca_create_srq() Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 149/265] RDMA/irdma: Fix kernel stack leak in irdma_create_user_ah() Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 150/265] net/sched: ets: fix divide by zero in the offload path Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 151/265] nfsd: Fix cred ref leak in nfsd_nl_threads_set_doit() Greg Kroah-Hartman
2026-03-12 20:08 ` [PATCH 6.12 152/265] tracing: Fix WARN_ON in tracing_buffers_mmap_close Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 153/265] scsi: target: Fix recursive locking in __configfs_open_file() Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 154/265] Squashfs: check metadata block offset is within range Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 155/265] drbd: fix "LOGIC BUG" in drbd_al_begin_io_nonblock() Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 156/265] drbd: fix null-pointer dereference on local read error Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 157/265] smb: client: fix cifs_pick_channel when channels are equally loaded Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 158/265] smb: client: fix broken multichannel with krb5+signing Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 159/265] smb: client: Dont log plaintext credentials in cifs_set_cifscreds Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 160/265] scsi: core: Fix refcount leak for tagset_refcnt Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 161/265] selftests: mptcp: more stable simult_flows tests Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 162/265] selftests: mptcp: join: check removing signal+subflow endp Greg Kroah-Hartman
2026-03-13  9:54   ` Matthieu Baerts
2026-03-13 16:02     ` Greg Kroah-Hartman
2026-03-13 16:24       ` Matthieu Baerts
2026-03-12 20:09 ` [PATCH 6.12 163/265] xattr: switch to CLASS(fd) Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 164/265] ARM: clean up the memset64() C wrapper Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 165/265] net: stmmac: dwmac-loongson: Set clk_csr_i to 100-150MHz Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 166/265] btrfs: always fallback to buffered write if the inode requires checksum Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 167/265] ACPI: APEI: GHES: Disable KASAN instrumentation when compile testing with clang < 18 Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 168/265] nvme: fix admin queue leak on controller reset Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 169/265] hwmon: (aht10) Add support for dht20 Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 170/265] hwmon: (aht10) Fix initialization commands for AHT20 Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 171/265] pinctrl: equilibrium: rename irq_chip function callbacks Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 172/265] pinctrl: equilibrium: fix warning trace on load Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 173/265] platform/x86: thinkpad_acpi: Fix errors reading battery thresholds Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 174/265] HID: multitouch: Get the contact ID from HID_DG_TRANSDUCER_INDEX fields in case of Apple Touch Bar Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 175/265] HID: multitouch: add device ID for " Greg Kroah-Hartman
2026-03-13  0:27   ` Aditya Garg
2026-03-13 16:00     ` Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 176/265] HID: multitouch: add quirks for Lenovo Yoga Book 9i Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 177/265] HID: multitouch: new class MT_CLS_EGALAX_P80H84 Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 178/265] pinctrl: cirrus: cs42l43: Fix double-put in cs42l43_pin_probe() Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 179/265] hwmon: (it87) Check the it87_lock() return value Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 180/265] idpf: change IRQ naming to match netdev and ethtool queue numbering Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 181/265] i40e: Fix preempt count leak in napi poll tracepoint Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 182/265] e1000e: clear DPG_EN after reset to avoid autonomous power-gating Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 183/265] drm/solomon: Fix page start when updating rectangle in page addressing mode Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 184/265] net: ethernet: ti: am65-cpsw-nuss/cpsw-ale: Fix multicast entry handling in ALE table Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 185/265] xsk: Get rid of xdp_buff_xsk::xskb_list_node Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 186/265] xsk: s/free_list_node/list_node/ Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 187/265] xsk: Fix fragment node deletion to prevent buffer leak Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 188/265] xsk: Fix zero-copy AF_XDP fragment drop Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 189/265] dpaa2-switch: Fix interrupt storm after receiving bad if_id in IRQ handler Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 190/265] atm: lec: fix null-ptr-deref in lec_arp_clear_vccs Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 191/265] net: ti: icssg-prueth: Fix ping failure after offload mode setup when link speed is not 1G Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 192/265] amd-xgbe: fix MAC_TCR_SS register width for 2.5G and 10M speeds Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 193/265] can: bcm: fix locking for bcm_op runtime updates Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 194/265] can: mcp251x: fix deadlock in error path of mcp251x_open Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 195/265] wifi: rsi: Dont default to -EOPNOTSUPP in rsi_mac80211_config Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 196/265] drm/xe: Do not preempt fence signaling CS instructions Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 197/265] rust: kunit: fix warning when !CONFIG_PRINTK Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 198/265] kunit: tool: copy caller args in run_kernel to prevent mutation Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 199/265] net: dsa: realtek: rtl8365mb: fix rtl8365mb_phy_ocp_write return value Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 200/265] bpf/bonding: reject vlan+srcmac xmit_hash_policy change when XDP is loaded Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 201/265] octeon_ep: Relocate counter updates before NAPI Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 202/265] octeon_ep: avoid compiler and IQ/OQ reordering Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 203/265] octeon_ep_vf: Relocate counter updates before NAPI Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 204/265] octeon_ep_vf: avoid compiler and IQ/OQ reordering Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 205/265] wifi: cw1200: Fix locking in error paths Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 206/265] wifi: wlcore: Fix a locking bug Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 207/265] wifi: mt76: mt7996: Fix possible oob access in mt7996_mac_write_txwi_80211() Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 208/265] wifi: mt76: mt7925: Fix possible oob access in mt7925_mac_write_txwi_80211() Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 209/265] wifi: mt76: Fix possible oob access in mt76_connac2_mac_write_txwi_80211() Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 210/265] indirect_call_wrapper: do not reevaluate function pointer Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 211/265] net/rds: Fix circular locking dependency in rds_tcp_tune Greg Kroah-Hartman
2026-03-12 20:09 ` [PATCH 6.12 212/265] xen/acpi-processor: fix _CST detection using undersized evaluation buffer Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 213/265] iavf: fix netdev->max_mtu to respect actual hardware limit Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 214/265] bpf: Fix a UAF issue in bpf_trampoline_link_cgroup_shim Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 215/265] smb/client: fix buffer size for smb311_posix_qinfo in smb2_compound_op() Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 216/265] smb/client: fix buffer size for smb311_posix_qinfo in SMB311_posix_query_info() Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 217/265] ipv6: fix NULL pointer deref in ip6_rt_get_dev_rcu() Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 218/265] net: ipv4: fix ARM64 alignment fault in multipath hash seed Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 219/265] amd-xgbe: fix sleep while atomic on suspend/resume Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 220/265] drm/sched: Fix kernel-doc warning for drm_sched_job_done() Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 221/265] i2c: i801: Revert "i2c: i801: replace acpi_lock with I2C bus lock" Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 222/265] drm/xe/reg_sr: Fix leak on xa_store failure Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 223/265] nvme: reject invalid pr_read_keys() num_keys values Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 224/265] nvme: fix memory allocation in nvme_pr_read_keys() Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 225/265] hwmon: (max6639) : Configure based on DT property Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 226/265] hwmon: (max6639) fix inverted polarity Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 227/265] net: sched: avoid qdisc_reset_all_tx_gt() vs dequeue race for lockless qdiscs Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 228/265] net: nfc: nci: Fix zero-length proprietary notifications Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 229/265] net_sched: sch_fq: clear q->band_pkt_count[] in fq_reset() Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 230/265] nfc: nci: free skb on nci_transceive early error paths Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 231/265] nfc: nci: clear NCI_DATA_EXCHANGE before calling completion callback Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 232/265] nfc: rawsock: cancel tx_work before socket teardown Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 233/265] net: stmmac: Fix error handling in VLAN add and delete paths Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 234/265] netfilter: nft_set_pipapo: split gc into unlink and reclaim phase Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 235/265] net: ethernet: mtk_eth_soc: Reset prog ptr to old_prog in case of error in mtk_xdp_setup() Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 236/265] kselftest/harness: Use helper to avoid zero-size memset warning Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 237/265] selftests/harness: order TEST_F and XFAIL_ADD constructors Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 238/265] net: bridge: fix nd_tbl NULL dereference when IPv6 is disabled Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 239/265] net: vxlan: " Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 240/265] net: ipv6: fix panic when IPv4 route references loopback IPv6 nexthop Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 241/265] net/sched: act_ife: Fix metalist update behavior Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 242/265] xdp: use modulo operation to calculate XDP frag tailroom Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 243/265] xsk: introduce helper to determine rxq->frag_size Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 244/265] i40e: fix registering XDP RxQ info Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 245/265] i40e: use xdp.frame_sz as XDP RxQ info frag_size Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 246/265] xdp: produce a warning when calculated tailroom is negative Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 247/265] selftest/arm64: Fix sve2p1_sigill() to hwcap test Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 248/265] tracing: Add NULL pointer check to trigger_data_free() Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 249/265] net/sched: Only allow act_ct to bind to clsact/ingress qdiscs and shared blocks Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 250/265] apparmor: validate DFA start states are in bounds in unpack_pdb Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 251/265] apparmor: fix memory leak in verify_header Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 252/265] apparmor: replace recursive profile removal with iterative approach Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 253/265] apparmor: fix: limit the number of levels of policy namespaces Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 254/265] apparmor: fix side-effect bug in match_char() macro usage Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 255/265] apparmor: fix missing bounds check on DEFAULT table in verify_dfa() Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 256/265] apparmor: Fix double free of ns_name in aa_replace_profiles() Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 257/265] apparmor: fix unprivileged local user can do privileged policy management Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 258/265] apparmor: fix differential encoding verification Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 259/265] apparmor: fix race on rawdata dereference Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 260/265] apparmor: fix race between freeing data and fs accessing it Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 261/265] ext4: fix potential null deref in ext4_mb_init() Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 262/265] ata: libata-core: fix cancellation of a port deferred qc work Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 263/265] ata: libata-eh: correctly handle deferred qc timeouts Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 264/265] ata: libata: cancel pending work after clearing deferred_qc Greg Kroah-Hartman
2026-03-12 20:10 ` [PATCH 6.12 265/265] ata: libata-eh: Fix detection of deferred qc timeouts Greg Kroah-Hartman
2026-03-12 20:41 ` [PATCH 6.12 000/265] 6.12.77-rc1 review Brett A C Sheffield
2026-03-13  3:25 ` Shuah Khan
2026-03-13  5:32 ` freeze during boot regression " Barry K. Nathan
2026-03-13  5:55   ` Barry K. Nathan
2026-03-13  6:10     ` Ron Economos
2026-03-13  7:27       ` Francesco Dolcini
2026-03-13  8:05       ` Barry K. Nathan
2026-03-13  9:37         ` Ron Economos
2026-03-13 10:53           ` Barry K. Nathan
2026-03-13 13:38             ` Barry K. Nathan
2026-03-13 13:49               ` Greg Kroah-Hartman
2026-03-13 13:05 ` Mark Brown
2026-03-13 16:16 ` Jon Hunter
2026-03-13 16:18   ` Jon Hunter
2026-03-13 17:02 ` Florian Fainelli
2026-03-13 21:10 ` Miguel Ojeda

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260312201021.033891276@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=libaokun1@huawei.com \
    --cc=patches@lists.linux.dev \
    --cc=sashal@kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=tytso@mit.edu \
    --cc=yi.zhang@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox