]> git.apps.os.sepia.ceph.com Git - xfsprogs-dev.git/commitdiff
xfs_repair: refactor generate_rtinfo
authorChristoph Hellwig <hch@lst.de>
Thu, 21 Nov 2024 00:24:22 +0000 (16:24 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Tue, 24 Dec 2024 02:01:28 +0000 (18:01 -0800)
Move the allocation of the computed values into generate_rtinfo, and thus
make the variables holding them private in rt.c, and clean up a few
formatting nits.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
[djwong: move functions to fix build errors]
Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
repair/globals.c
repair/globals.h
repair/phase5.c
repair/phase6.c
repair/rt.c
repair/rt.h

index b63931be9fdb7083ae50d64867d313034f8660f7..bd07a9656d193b44f669288c2ff2fa33ff3426bc 100644 (file)
@@ -87,11 +87,6 @@ unsigned int glob_agcount;
 int            chunks_pblock;  /* # of 64-ino chunks per allocation */
 int            max_symlink_blocks;
 
-/* realtime info */
-
-union xfs_rtword_raw   *btmcompute;
-union xfs_suminfo_raw  *sumcompute;
-
 /* inode tree records have full or partial backptr fields ? */
 
 int    full_ino_ex_data;       /*
index 1dc85ce7f8114cf4166ac2529ae16945668d5999..ebe8d5ee132b8d1fbc72364fd646023e682ebb9d 100644 (file)
@@ -128,11 +128,6 @@ extern unsigned int        glob_agcount;
 extern int             chunks_pblock;  /* # of 64-ino chunks per allocation */
 extern int             max_symlink_blocks;
 
-/* realtime info */
-
-extern union xfs_rtword_raw            *btmcompute;
-extern union xfs_suminfo_raw           *sumcompute;
-
 /* inode tree records have full or partial backptr fields ? */
 
 extern int             full_ino_ex_data;/*
index a5e19998b9706165e595fc96e3e906ebffba6c94..91c4a8662a69f263440ecac9dc82111962c38fc5 100644 (file)
@@ -627,8 +627,7 @@ void
 check_rtmetadata(
        struct xfs_mount        *mp)
 {
-       rtinit(mp);
-       generate_rtinfo(mp, btmcompute, sumcompute);
+       generate_rtinfo(mp);
        check_rtbitmap(mp);
        check_rtsummary(mp);
 }
index 3dd67f7e0ec051263ff875597f66d0f7f0dae950..44677096873a54e7eff0c4730cfc96efad5577c2 100644 (file)
@@ -19,6 +19,7 @@
 #include "progress.h"
 #include "versions.h"
 #include "repair/pptr.h"
+#include "repair/rt.h"
 
 static xfs_ino_t               orphanage_ino;
 
@@ -556,52 +557,6 @@ mk_rbmino(
        libxfs_irele(ip);
 }
 
-static void
-fill_rbmino(
-       struct xfs_mount        *mp)
-{
-       struct xfs_inode        *ip;
-       int                     error;
-
-       error = -libxfs_metafile_iget(mp, mp->m_sb.sb_rbmino,
-                       XFS_METAFILE_RTBITMAP, &ip);
-       if (error)
-               do_error(
-_("couldn't iget realtime bitmap inode, error %d\n"), error);
-
-       error = -libxfs_rtfile_initialize_blocks(ip, 0, mp->m_sb.sb_rbmblocks,
-                       btmcompute);
-       if (error)
-               do_error(
-_("couldn't re-initialize realtime bitmap inode, error %d\n"), error);
-
-       libxfs_irele(ip);
-}
-
-static void
-fill_rsumino(
-       struct xfs_mount        *mp)
-{
-       struct xfs_inode        *ip;
-       int                     error;
-
-       error = -libxfs_metafile_iget(mp, mp->m_sb.sb_rsumino,
-                       XFS_METAFILE_RTSUMMARY, &ip);
-       if (error)
-               do_error(
-_("couldn't iget realtime summary inode, error %d\n"), error);
-
-       mp->m_rsumip = ip;
-       error = -libxfs_rtfile_initialize_blocks(ip, 0, mp->m_rsumblocks,
-                       sumcompute);
-       mp->m_rsumip = NULL;
-       if (error)
-               do_error(
-_("couldn't re-initialize realtime summary inode, error %d\n"), error);
-
-       libxfs_irele(ip);
-}
-
 static void
 mk_rsumino(
        struct xfs_mount        *mp)
@@ -3335,8 +3290,8 @@ phase6(xfs_mount_t *mp)
        if (!no_modify)  {
                do_log(
 _("        - resetting contents of realtime bitmap and summary inodes\n"));
-               fill_rbmino(mp);
-               fill_rsumino(mp);
+               fill_rtbitmap(mp);
+               fill_rtsummary(mp);
        }
 
        mark_standalone_inodes(mp);
index 9ae421168e84b4059fa61fc13c14aa6fbb191835..d0a171020c4b49091aca763d26047eecfb8dfd58 100644 (file)
 #include "err_protos.h"
 #include "rt.h"
 
-void
-rtinit(xfs_mount_t *mp)
-{
-       unsigned long long      wordcnt;
-
-       if (mp->m_sb.sb_rblocks == 0)
-               return;
-
-       /*
-        * Allocate buffers for formatting the collected rt free space
-        * information.  The rtbitmap buffer must be large enough to compare
-        * against any unused bytes in the last block of the file.
-        */
-       wordcnt = XFS_FSB_TO_B(mp, mp->m_sb.sb_rbmblocks) >> XFS_WORDLOG;
-       btmcompute = calloc(wordcnt, sizeof(union xfs_rtword_raw));
-       if (!btmcompute)
-               do_error(
-       _("couldn't allocate memory for incore realtime bitmap.\n"));
-
-       wordcnt = XFS_FSB_TO_B(mp, mp->m_rsumblocks) >> XFS_WORDLOG;
-       sumcompute = calloc(wordcnt, sizeof(union xfs_suminfo_raw));
-       if (!sumcompute)
-               do_error(
-       _("couldn't allocate memory for incore realtime summary info.\n"));
-}
+/* Computed rt bitmap/summary data */
+static union xfs_rtword_raw    *btmcompute;
+static union xfs_suminfo_raw   *sumcompute;
 
 static inline void
 set_rtword(
@@ -64,58 +42,66 @@ inc_sumcount(
  * generate the real-time bitmap and summary info based on the
  * incore realtime extent map.
  */
-int
+void
 generate_rtinfo(
-       struct xfs_mount        *mp,
-       union xfs_rtword_raw    *words,
-       union xfs_suminfo_raw   *sumcompute)
+       struct xfs_mount        *mp)
 {
-       xfs_rtxnum_t    extno;
-       xfs_rtxnum_t    start_ext;
-       int             bitsperblock;
-       int             bmbno;
-       xfs_rtword_t    freebit;
-       xfs_rtword_t    bits;
-       int             start_bmbno;
-       int             i;
-       int             offs;
-       int             log;
-       int             len;
-       int             in_extent;
+       unsigned int            bitsperblock =
+               mp->m_blockwsize << XFS_NBWORDLOG;
+       xfs_rtxnum_t            extno = 0;
+       xfs_rtxnum_t            start_ext = 0;
+       int                     bmbno = 0;
+       int                     start_bmbno = 0;
+       bool                    in_extent = false;
+       unsigned long long      wordcnt;
+       union xfs_rtword_raw    *words;
 
-       ASSERT(mp->m_rbmip == NULL);
+       wordcnt = XFS_FSB_TO_B(mp, mp->m_sb.sb_rbmblocks) >> XFS_WORDLOG;
+       btmcompute = calloc(wordcnt, sizeof(union xfs_rtword_raw));
+       if (!btmcompute)
+               do_error(
+_("couldn't allocate memory for incore realtime bitmap.\n"));
+       words = btmcompute;
+
+       wordcnt = XFS_FSB_TO_B(mp, mp->m_rsumblocks) >> XFS_WORDLOG;
+       sumcompute = calloc(wordcnt, sizeof(union xfs_suminfo_raw));
+       if (!sumcompute)
+               do_error(
+_("couldn't allocate memory for incore realtime summary info.\n"));
 
-       bitsperblock = mp->m_blockwsize << XFS_NBWORDLOG;
-       extno = start_ext = 0;
-       bmbno = in_extent = start_bmbno = 0;
+       ASSERT(mp->m_rbmip == NULL);
 
        /*
-        * slower but simple, don't play around with trying to set
-        * things one word at a time, just set bit as required.
-        * Have to * track start and end (size) of each range of
-        * free extents to set the summary info properly.
+        * Slower but simple, don't play around with trying to set things one
+        * word at a time, just set bit as required.  Have to track start and
+        * end (size) of each range of free extents to set the summary info
+        * properly.
         */
        while (extno < mp->m_sb.sb_rextents)  {
-               freebit = 1;
+               xfs_rtword_t            freebit = 1;
+               xfs_rtword_t            bits = 0;
+               int                     i;
+
                set_rtword(mp, words, 0);
-               bits = 0;
                for (i = 0; i < sizeof(xfs_rtword_t) * NBBY &&
                                extno < mp->m_sb.sb_rextents; i++, extno++)  {
                        if (get_rtbmap(extno) == XR_E_FREE)  {
                                sb_frextents++;
                                bits |= freebit;
 
-                               if (in_extent == 0) {
+                               if (!in_extent) {
                                        start_ext = extno;
                                        start_bmbno = bmbno;
-                                       in_extent = 1;
+                                       in_extent = true;
                                }
-                       } else if (in_extent == 1) {
-                               len = (int) (extno - start_ext);
-                               log = libxfs_highbit64(len);
-                               offs = xfs_rtsumoffs(mp, log, start_bmbno);
+                       } else if (in_extent) {
+                               uint64_t        len = extno - start_ext;
+                               xfs_rtsumoff_t  offs;
+
+                               offs = xfs_rtsumoffs(mp, libxfs_highbit64(len),
+                                               start_bmbno);
                                inc_sumcount(mp, sumcompute, offs);
-                               in_extent = 0;
+                               in_extent = false;
                        }
 
                        freebit <<= 1;
@@ -126,10 +112,12 @@ generate_rtinfo(
                if (extno % bitsperblock == 0)
                        bmbno++;
        }
-       if (in_extent == 1) {
-               len = (int) (extno - start_ext);
-               log = libxfs_highbit64(len);
-               offs = xfs_rtsumoffs(mp, log, start_bmbno);
+
+       if (in_extent) {
+               uint64_t        len = extno - start_ext;
+               xfs_rtsumoff_t  offs;
+
+               offs = xfs_rtsumoffs(mp, libxfs_highbit64(len), start_bmbno);
                inc_sumcount(mp, sumcompute, offs);
        }
 
@@ -137,8 +125,6 @@ generate_rtinfo(
                do_warn(_("sb_frextents %" PRIu64 ", counted %" PRIu64 "\n"),
                                mp->m_sb.sb_frextents, sb_frextents);
        }
-
-       return(0);
 }
 
 static void
@@ -245,3 +231,49 @@ check_rtsummary(
 
        check_rtfile_contents(mp, XFS_METAFILE_RTSUMMARY, mp->m_rsumblocks);
 }
+
+void
+fill_rtbitmap(
+       struct xfs_mount        *mp)
+{
+       struct xfs_inode        *ip;
+       int                     error;
+
+       error = -libxfs_metafile_iget(mp, mp->m_sb.sb_rbmino,
+                       XFS_METAFILE_RTBITMAP, &ip);
+       if (error)
+               do_error(
+_("couldn't iget realtime bitmap inode, error %d\n"), error);
+
+       error = -libxfs_rtfile_initialize_blocks(ip, 0, mp->m_sb.sb_rbmblocks,
+                       btmcompute);
+       if (error)
+               do_error(
+_("couldn't re-initialize realtime bitmap inode, error %d\n"), error);
+
+       libxfs_irele(ip);
+}
+
+void
+fill_rtsummary(
+       struct xfs_mount        *mp)
+{
+       struct xfs_inode        *ip;
+       int                     error;
+
+       error = -libxfs_metafile_iget(mp, mp->m_sb.sb_rsumino,
+                       XFS_METAFILE_RTSUMMARY, &ip);
+       if (error)
+               do_error(
+_("couldn't iget realtime summary inode, error %d\n"), error);
+
+       mp->m_rsumip = ip;
+       error = -libxfs_rtfile_initialize_blocks(ip, 0, mp->m_rsumblocks,
+                       sumcompute);
+       mp->m_rsumip = NULL;
+       if (error)
+               do_error(
+_("couldn't re-initialize realtime summary inode, error %d\n"), error);
+
+       libxfs_irele(ip);
+}
index 862695487bcd4c3aa97a2260edde187ef6bb2f88..f8caa5dc874ec29440786efbf6b3ac19a8c70fa2 100644 (file)
@@ -6,15 +6,11 @@
 #ifndef _XFS_REPAIR_RT_H_
 #define _XFS_REPAIR_RT_H_
 
-struct blkmap;
-
-void
-rtinit(xfs_mount_t             *mp);
-
-int generate_rtinfo(struct xfs_mount *mp, union xfs_rtword_raw *words,
-               union xfs_suminfo_raw *sumcompute);
-
+void generate_rtinfo(struct xfs_mount *mp);
 void check_rtbitmap(struct xfs_mount *mp);
 void check_rtsummary(struct xfs_mount *mp);
 
+void fill_rtbitmap(struct xfs_mount *mp);
+void fill_rtsummary(struct xfs_mount *mp);
+
 #endif /* _XFS_REPAIR_RT_H_ */