From: <gregkh@linuxfoundation.org>
To: bfoster@redhat.com,catherine.hoang@oracle.com,cem@kernel.org,djwong@kernel.org,gregkh@linuxfoundation.org,hch@lst.de,xfs-stable@lists.linux.dev
Cc: <stable-commits@vger.kernel.org>
Subject: Patch "xfs: pass the exact range to initialize to xfs_initialize_perag" has been added to the 6.6-stable tree
Date: Fri, 21 Feb 2025 16:23:28 +0100 [thread overview]
Message-ID: <2025022128-premises-follow-5de0@gregkh> (raw)
In-Reply-To: <20250205214025.72516-18-catherine.hoang@oracle.com>
This is a note to let you know that I've just added the patch titled
xfs: pass the exact range to initialize to xfs_initialize_perag
to the 6.6-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
xfs-pass-the-exact-range-to-initialize-to-xfs_initialize_perag.patch
and it can be found in the queue-6.6 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@vger.kernel.org> know about it.
From stable+bounces-113983-greg=kroah.com@vger.kernel.org Wed Feb 5 22:41:16 2025
From: Catherine Hoang <catherine.hoang@oracle.com>
Date: Wed, 5 Feb 2025 13:40:18 -0800
Subject: xfs: pass the exact range to initialize to xfs_initialize_perag
To: stable@vger.kernel.org
Cc: xfs-stable@lists.linux.dev
Message-ID: <20250205214025.72516-18-catherine.hoang@oracle.com>
From: Christoph Hellwig <hch@lst.de>
commit 82742f8c3f1a93787a05a00aca50c2a565231f84 upstream.
[backport: dependency of 6a18765b]
Currently only the new agcount is passed to xfs_initialize_perag, which
requires lookups of existing AGs to skip them and complicates error
handling. Also pass the previous agcount so that the range that
xfs_initialize_perag operates on is exactly defined. That way the
extra lookups can be avoided, and error handling can clean up the
exact range from the old count to the last added perag structure.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
Acked-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/xfs/libxfs/xfs_ag.c | 28 ++++++----------------------
fs/xfs/libxfs/xfs_ag.h | 5 +++--
fs/xfs/xfs_fsops.c | 18 ++++++++----------
fs/xfs/xfs_log_recover.c | 5 +++--
fs/xfs/xfs_mount.c | 4 ++--
5 files changed, 22 insertions(+), 38 deletions(-)
--- a/fs/xfs/libxfs/xfs_ag.c
+++ b/fs/xfs/libxfs/xfs_ag.c
@@ -360,27 +360,16 @@ xfs_free_unused_perag_range(
int
xfs_initialize_perag(
struct xfs_mount *mp,
- xfs_agnumber_t agcount,
+ xfs_agnumber_t old_agcount,
+ xfs_agnumber_t new_agcount,
xfs_rfsblock_t dblocks,
xfs_agnumber_t *maxagi)
{
struct xfs_perag *pag;
xfs_agnumber_t index;
- xfs_agnumber_t first_initialised = NULLAGNUMBER;
int error;
- /*
- * Walk the current per-ag tree so we don't try to initialise AGs
- * that already exist (growfs case). Allocate and insert all the
- * AGs we don't find ready for initialisation.
- */
- for (index = 0; index < agcount; index++) {
- pag = xfs_perag_get(mp, index);
- if (pag) {
- xfs_perag_put(pag);
- continue;
- }
-
+ for (index = old_agcount; index < new_agcount; index++) {
pag = kmem_zalloc(sizeof(*pag), KM_MAYFAIL);
if (!pag) {
error = -ENOMEM;
@@ -425,21 +414,17 @@ xfs_initialize_perag(
/* Active ref owned by mount indicates AG is online. */
atomic_set(&pag->pag_active_ref, 1);
- /* first new pag is fully initialized */
- if (first_initialised == NULLAGNUMBER)
- first_initialised = index;
-
/*
* Pre-calculated geometry
*/
- pag->block_count = __xfs_ag_block_count(mp, index, agcount,
+ pag->block_count = __xfs_ag_block_count(mp, index, new_agcount,
dblocks);
pag->min_block = XFS_AGFL_BLOCK(mp);
__xfs_agino_range(mp, pag->block_count, &pag->agino_min,
&pag->agino_max);
}
- index = xfs_set_inode_alloc(mp, agcount);
+ index = xfs_set_inode_alloc(mp, new_agcount);
if (maxagi)
*maxagi = index;
@@ -455,8 +440,7 @@ out_remove_pag:
out_free_pag:
kmem_free(pag);
out_unwind_new_pags:
- /* unwind any prior newly initialized pags */
- xfs_free_unused_perag_range(mp, first_initialised, agcount);
+ xfs_free_unused_perag_range(mp, old_agcount, index);
return error;
}
--- a/fs/xfs/libxfs/xfs_ag.h
+++ b/fs/xfs/libxfs/xfs_ag.h
@@ -135,8 +135,9 @@ __XFS_AG_OPSTATE(agfl_needs_reset, AGFL_
void xfs_free_unused_perag_range(struct xfs_mount *mp, xfs_agnumber_t agstart,
xfs_agnumber_t agend);
-int xfs_initialize_perag(struct xfs_mount *mp, xfs_agnumber_t agcount,
- xfs_rfsblock_t dcount, xfs_agnumber_t *maxagi);
+int xfs_initialize_perag(struct xfs_mount *mp, xfs_agnumber_t old_agcount,
+ xfs_agnumber_t agcount, xfs_rfsblock_t dcount,
+ xfs_agnumber_t *maxagi);
int xfs_initialize_perag_data(struct xfs_mount *mp, xfs_agnumber_t agno);
void xfs_free_perag(struct xfs_mount *mp);
--- a/fs/xfs/xfs_fsops.c
+++ b/fs/xfs/xfs_fsops.c
@@ -87,6 +87,7 @@ xfs_growfs_data_private(
struct xfs_mount *mp, /* mount point for filesystem */
struct xfs_growfs_data *in) /* growfs data input struct */
{
+ xfs_agnumber_t oagcount = mp->m_sb.sb_agcount;
struct xfs_buf *bp;
int error;
xfs_agnumber_t nagcount;
@@ -94,7 +95,6 @@ xfs_growfs_data_private(
xfs_rfsblock_t nb, nb_div, nb_mod;
int64_t delta;
bool lastag_extended = false;
- xfs_agnumber_t oagcount;
struct xfs_trans *tp;
struct aghdr_init_data id = {};
struct xfs_perag *last_pag;
@@ -138,16 +138,14 @@ xfs_growfs_data_private(
if (delta == 0)
return 0;
- oagcount = mp->m_sb.sb_agcount;
- /* allocate the new per-ag structures */
- if (nagcount > oagcount) {
- error = xfs_initialize_perag(mp, nagcount, nb, &nagimax);
- if (error)
- return error;
- } else if (nagcount < oagcount) {
- /* TODO: shrinking the entire AGs hasn't yet completed */
+ /* TODO: shrinking the entire AGs hasn't yet completed */
+ if (nagcount < oagcount)
return -EINVAL;
- }
+
+ /* allocate the new per-ag structures */
+ error = xfs_initialize_perag(mp, oagcount, nagcount, nb, &nagimax);
+ if (error)
+ return error;
if (delta > 0)
error = xfs_trans_alloc(mp, &M_RES(mp)->tr_growdata,
--- a/fs/xfs/xfs_log_recover.c
+++ b/fs/xfs/xfs_log_recover.c
@@ -3317,6 +3317,7 @@ xlog_do_recover(
struct xfs_mount *mp = log->l_mp;
struct xfs_buf *bp = mp->m_sb_bp;
struct xfs_sb *sbp = &mp->m_sb;
+ xfs_agnumber_t orig_agcount = sbp->sb_agcount;
int error;
trace_xfs_log_recover(log, head_blk, tail_blk);
@@ -3365,8 +3366,8 @@ xlog_do_recover(
/* re-initialise in-core superblock and geometry structures */
mp->m_features |= xfs_sb_version_to_features(sbp);
xfs_reinit_percpu_counters(mp);
- error = xfs_initialize_perag(mp, sbp->sb_agcount, sbp->sb_dblocks,
- &mp->m_maxagi);
+ error = xfs_initialize_perag(mp, orig_agcount, sbp->sb_agcount,
+ sbp->sb_dblocks, &mp->m_maxagi);
if (error) {
xfs_warn(mp, "Failed post-recovery per-ag init: %d", error);
return error;
--- a/fs/xfs/xfs_mount.c
+++ b/fs/xfs/xfs_mount.c
@@ -797,8 +797,8 @@ xfs_mountfs(
/*
* Allocate and initialize the per-ag data.
*/
- error = xfs_initialize_perag(mp, sbp->sb_agcount, mp->m_sb.sb_dblocks,
- &mp->m_maxagi);
+ error = xfs_initialize_perag(mp, 0, sbp->sb_agcount,
+ mp->m_sb.sb_dblocks, &mp->m_maxagi);
if (error) {
xfs_warn(mp, "Failed per-ag init: %d", error);
goto out_free_dir;
Patches currently in stable-queue which might be from catherine.hoang@oracle.com are
queue-6.6/xfs-return-bool-from-xfs_attr3_leaf_add.patch
queue-6.6/xfs-fix-a-sloppy-memory-handling-bug-in-xfs_iroot_realloc.patch
queue-6.6/xfs-streamline-xfs_filestream_pick_ag.patch
queue-6.6/xfs-merge-xfs_attr_leaf_try_add-into-xfs_attr_leaf_addname.patch
queue-6.6/xfs-don-t-free-cowblocks-from-under-dirty-pagecache-on-unshare.patch
queue-6.6/xfs-pass-the-exact-range-to-initialize-to-xfs_initialize_perag.patch
queue-6.6/xfs-assert-a-valid-limit-in-xfs_rtfind_forw.patch
queue-6.6/xfs-don-t-use-__gfp_retry_mayfail-in-xfs_initialize_perag.patch
queue-6.6/xfs-use-try_cmpxchg-in-xlog_cil_insert_pcp_aggregate.patch
queue-6.6/xfs-don-t-ifdef-around-the-exact-minlen-allocations.patch
queue-6.6/xfs-reduce-unnecessary-searches-when-searching-for-the-best-extents.patch
queue-6.6/xfs-validate-inumber-in-xfs_iget.patch
queue-6.6/xfs-support-lowmode-allocations-in-xfs_bmap_exact_minlen_extent_alloc.patch
queue-6.6/xfs-skip-background-cowblock-trims-on-inodes-open-for-write.patch
queue-6.6/xfs-remove-empty-declartion-in-header-file.patch
queue-6.6/xfs-fold-xfs_bmap_alloc_userdata-into-xfs_bmapi_allocate.patch
queue-6.6/xfs-update-the-file-system-geometry-after-recoverying-superblock-buffers.patch
queue-6.6/xfs-call-xfs_bmap_exact_minlen_extent_alloc-from-xfs_bmap_btalloc.patch
queue-6.6/xfs-distinguish-extra-split-from-real-enospc-from-xfs_attr_node_try_addname.patch
queue-6.6/xfs-error-out-when-a-superblock-buffer-update-reduces-the-agcount.patch
queue-6.6/xfs-update-the-pag-for-the-last-ag-at-recovery-time.patch
queue-6.6/xfs-check-for-delayed-allocations-before-setting-extsize.patch
queue-6.6/xfs-fix-a-typo.patch
queue-6.6/xfs-distinguish-extra-split-from-real-enospc-from-xfs_attr3_leaf_split.patch
next prev parent reply other threads:[~2025-02-21 15:24 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-05 21:40 [PATCH 6.6 00/24] xfs backports for 6.6.y (from 6.12) Catherine Hoang
2025-02-05 21:40 ` [PATCH 6.6 01/24] xfs: assert a valid limit in xfs_rtfind_forw Catherine Hoang
2025-02-07 22:51 ` Sasha Levin
2025-02-21 15:23 ` Patch "xfs: assert a valid limit in xfs_rtfind_forw" has been added to the 6.6-stable tree gregkh
2025-02-05 21:40 ` [PATCH 6.6 02/24] xfs: validate inumber in xfs_iget Catherine Hoang
2025-02-21 15:23 ` Patch "xfs: validate inumber in xfs_iget" has been added to the 6.6-stable tree gregkh
2025-02-05 21:40 ` [PATCH 6.6 03/24] xfs: fix a sloppy memory handling bug in xfs_iroot_realloc Catherine Hoang
2025-02-21 15:23 ` Patch "xfs: fix a sloppy memory handling bug in xfs_iroot_realloc" has been added to the 6.6-stable tree gregkh
2025-02-05 21:40 ` [PATCH 6.6 04/24] xfs: fix a typo Catherine Hoang
2025-02-21 15:23 ` Patch "xfs: fix a typo" has been added to the 6.6-stable tree gregkh
2025-02-05 21:40 ` [PATCH 6.6 05/24] xfs: skip background cowblock trims on inodes open for write Catherine Hoang
2025-02-21 15:23 ` Patch "xfs: skip background cowblock trims on inodes open for write" has been added to the 6.6-stable tree gregkh
2025-02-05 21:40 ` [PATCH 6.6 06/24] xfs: don't free cowblocks from under dirty pagecache on unshare Catherine Hoang
2025-02-21 15:23 ` Patch "xfs: don't free cowblocks from under dirty pagecache on unshare" has been added to the 6.6-stable tree gregkh
2025-02-05 21:40 ` [PATCH 6.6 07/24] xfs: merge xfs_attr_leaf_try_add into xfs_attr_leaf_addname Catherine Hoang
2025-02-21 15:23 ` Patch "xfs: merge xfs_attr_leaf_try_add into xfs_attr_leaf_addname" has been added to the 6.6-stable tree gregkh
2025-02-05 21:40 ` [PATCH 6.6 08/24] xfs: return bool from xfs_attr3_leaf_add Catherine Hoang
2025-02-21 15:23 ` Patch "xfs: return bool from xfs_attr3_leaf_add" has been added to the 6.6-stable tree gregkh
2025-02-05 21:40 ` [PATCH 6.6 09/24] xfs: distinguish extra split from real ENOSPC from xfs_attr3_leaf_split Catherine Hoang
2025-02-21 15:23 ` Patch "xfs: distinguish extra split from real ENOSPC from xfs_attr3_leaf_split" has been added to the 6.6-stable tree gregkh
2025-02-05 21:40 ` [PATCH 6.6 10/24] xfs: distinguish extra split from real ENOSPC from xfs_attr_node_try_addname Catherine Hoang
2025-02-21 15:23 ` Patch "xfs: distinguish extra split from real ENOSPC from xfs_attr_node_try_addname" has been added to the 6.6-stable tree gregkh
2025-02-05 21:40 ` [PATCH 6.6 11/24] xfs: fold xfs_bmap_alloc_userdata into xfs_bmapi_allocate Catherine Hoang
2025-02-21 15:23 ` Patch "xfs: fold xfs_bmap_alloc_userdata into xfs_bmapi_allocate" has been added to the 6.6-stable tree gregkh
2025-02-05 21:40 ` [PATCH 6.6 12/24] xfs: don't ifdef around the exact minlen allocations Catherine Hoang
2025-02-21 15:23 ` Patch "xfs: don't ifdef around the exact minlen allocations" has been added to the 6.6-stable tree gregkh
2025-02-05 21:40 ` [PATCH 6.6 13/24] xfs: call xfs_bmap_exact_minlen_extent_alloc from xfs_bmap_btalloc Catherine Hoang
2025-02-21 15:23 ` Patch "xfs: call xfs_bmap_exact_minlen_extent_alloc from xfs_bmap_btalloc" has been added to the 6.6-stable tree gregkh
2025-02-05 21:40 ` [PATCH 6.6 14/24] xfs: support lowmode allocations in xfs_bmap_exact_minlen_extent_alloc Catherine Hoang
2025-02-21 15:23 ` Patch "xfs: support lowmode allocations in xfs_bmap_exact_minlen_extent_alloc" has been added to the 6.6-stable tree gregkh
2025-02-05 21:40 ` [PATCH 6.6 15/24] xfs: Use try_cmpxchg() in xlog_cil_insert_pcp_aggregate() Catherine Hoang
2025-02-21 15:23 ` Patch "xfs: Use try_cmpxchg() in xlog_cil_insert_pcp_aggregate()" has been added to the 6.6-stable tree gregkh
2025-02-21 15:33 ` Uros Bizjak
2025-02-21 15:57 ` Greg KH
2025-02-05 21:40 ` [PATCH 6.6 16/24] xfs: Remove empty declartion in header file Catherine Hoang
2025-02-21 15:23 ` Patch "xfs: Remove empty declartion in header file" has been added to the 6.6-stable tree gregkh
2025-02-05 21:40 ` [PATCH 6.6 17/24] xfs: pass the exact range to initialize to xfs_initialize_perag Catherine Hoang
2025-02-21 15:23 ` gregkh [this message]
2025-02-05 21:40 ` [PATCH 6.6 18/24] xfs: update the file system geometry after recoverying superblock buffers Catherine Hoang
2025-02-21 15:23 ` Patch "xfs: update the file system geometry after recoverying superblock buffers" has been added to the 6.6-stable tree gregkh
2025-02-05 21:40 ` [PATCH 6.6 19/24] xfs: error out when a superblock buffer update reduces the agcount Catherine Hoang
2025-02-21 15:23 ` Patch "xfs: error out when a superblock buffer update reduces the agcount" has been added to the 6.6-stable tree gregkh
2025-02-05 21:40 ` [PATCH 6.6 20/24] xfs: don't use __GFP_RETRY_MAYFAIL in xfs_initialize_perag Catherine Hoang
2025-02-21 15:23 ` Patch "xfs: don't use __GFP_RETRY_MAYFAIL in xfs_initialize_perag" has been added to the 6.6-stable tree gregkh
2025-02-05 21:40 ` [PATCH 6.6 21/24] xfs: update the pag for the last AG at recovery time Catherine Hoang
2025-02-21 15:23 ` Patch "xfs: update the pag for the last AG at recovery time" has been added to the 6.6-stable tree gregkh
2025-02-05 21:40 ` [PATCH 6.6 22/24] xfs: Reduce unnecessary searches when searching for the best extents Catherine Hoang
2025-02-21 15:23 ` Patch "xfs: Reduce unnecessary searches when searching for the best extents" has been added to the 6.6-stable tree gregkh
2025-02-05 21:40 ` [PATCH 6.6 23/24] xfs: streamline xfs_filestream_pick_ag Catherine Hoang
2025-02-21 15:23 ` Patch "xfs: streamline xfs_filestream_pick_ag" has been added to the 6.6-stable tree gregkh
2025-02-05 21:40 ` [PATCH 6.6 24/24] xfs: Check for delayed allocations before setting extsize Catherine Hoang
2025-02-21 15:23 ` Patch "xfs: Check for delayed allocations before setting extsize" has been added to the 6.6-stable tree gregkh
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=2025022128-premises-follow-5de0@gregkh \
--to=gregkh@linuxfoundation.org \
--cc=bfoster@redhat.com \
--cc=catherine.hoang@oracle.com \
--cc=cem@kernel.org \
--cc=djwong@kernel.org \
--cc=hch@lst.de \
--cc=stable-commits@vger.kernel.org \
--cc=xfs-stable@lists.linux.dev \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.