]> git-server-git.apps.pok.os.sepia.ceph.com Git - xfsprogs-dev.git/commitdiff
xfs: Refactoring the nagcount and delta calculation
authorNirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
Mon, 2 Mar 2026 01:39:59 +0000 (17:39 -0800)
committerAndrey Albershteyn <aalbersh@kernel.org>
Wed, 8 Apr 2026 19:39:56 +0000 (21:39 +0200)
Source kernel commit: a49b7ff63f98ba1c4503869c568c99ecffa478f2

Introduce xfs_growfs_compute_delta() to calculate the nagcount
and delta blocks and refactor the code from xfs_growfs_data_private().
No functional changes.

Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
libxfs/xfs_ag.c
libxfs/xfs_ag.h

index 5742d59a2659da75a7b7cca0a7f4e6124e55c6de..fd5f902b052435c57f31c468fbee659e1224443f 100644 (file)
@@ -870,6 +870,34 @@ resv_err:
        return err2;
 }
 
+void
+xfs_growfs_compute_deltas(
+       struct xfs_mount        *mp,
+       xfs_rfsblock_t          nb,
+       int64_t                 *deltap,
+       xfs_agnumber_t          *nagcountp)
+{
+       xfs_rfsblock_t  nb_div, nb_mod;
+       int64_t         delta;
+       xfs_agnumber_t  nagcount;
+
+       nb_div = nb;
+       nb_mod = do_div(nb_div, mp->m_sb.sb_agblocks);
+       if (nb_mod && nb_mod >= XFS_MIN_AG_BLOCKS)
+               nb_div++;
+       else if (nb_mod)
+               nb = nb_div * mp->m_sb.sb_agblocks;
+
+       if (nb_div > XFS_MAX_AGNUMBER + 1) {
+               nb_div = XFS_MAX_AGNUMBER + 1;
+               nb = nb_div * mp->m_sb.sb_agblocks;
+       }
+       nagcount = nb_div;
+       delta = nb - mp->m_sb.sb_dblocks;
+       *deltap = delta;
+       *nagcountp = nagcount;
+}
+
 /*
  * Extent the AG indicated by the @id by the length passed in
  */
index 1f24cfa273217245ae0ff08f053c90586d6489a4..3cd4790768ff91ac8028693cd416bc27e54432e3 100644 (file)
@@ -331,6 +331,9 @@ struct aghdr_init_data {
 int xfs_ag_init_headers(struct xfs_mount *mp, struct aghdr_init_data *id);
 int xfs_ag_shrink_space(struct xfs_perag *pag, struct xfs_trans **tpp,
                        xfs_extlen_t delta);
+void
+xfs_growfs_compute_deltas(struct xfs_mount *mp, xfs_rfsblock_t nb,
+                       int64_t *deltap, xfs_agnumber_t *nagcountp);
 int xfs_ag_extend_space(struct xfs_perag *pag, struct xfs_trans *tp,
                        xfs_extlen_t len);
 int xfs_ag_get_geometry(struct xfs_perag *pag, struct xfs_ag_geometry *ageo);