repair: refactor generate_rtinfo
authorChristoph Hellwig <hch@lst.de>
Wed, 17 Jul 2024 12:32:39 +0000 (14:32 +0200)
committerChristoph Hellwig <hch@lst.de>
Thu, 18 Jul 2024 13:22:49 +0000 (15:22 +0200)
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>
repair/globals.c
repair/globals.h
repair/phase5.c
repair/rt.c
repair/rt.h

index e0609776570eb0967f0bfaf860ba2f0133cc1b82..77fcaa0da8f40ab07b25e5eb729096236594b3dc 100644 (file)
@@ -95,11 +95,6 @@ int          chunks_pblock;  /* # of 64-ino chunks per allocation */
 int            max_symlink_blocks;
 int64_t                fs_max_file_offset;
 
-/* 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 b246bb9a9ebcf92c1c4fda77e53670b76c2fea07..178f4a4edac2b3f7cff4e48bc4b1c16b6f6f4b28 100644 (file)
@@ -136,11 +136,6 @@ extern int         chunks_pblock;  /* # of 64-ino chunks per allocation */
 extern int             max_symlink_blocks;
 extern int64_t         fs_max_file_offset;
 
-/* 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 65bdf942dc89dae95a6ac645ebe4022eca1f7ba9..c551aca1ec4040263568affaa27e1c5591bfbd71 100644 (file)
@@ -633,8 +633,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 2c93b6d643b7649ff9469c2a8f328da391fd0978..b0f0c0df361c4af4ba504f81e1227381ef5d4756 100644 (file)
 /* Bitmap of rt group inodes */
 static struct bitmap   *rtg_inodes[XFS_RTG_MAX];
 
-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 = libxfs_rtbitmap_wordcount(mp, mp->m_sb.sb_rextents);
-       btmcompute = calloc(wordcnt, sizeof(union xfs_rtword_raw));
-       if (!btmcompute)
-               do_error(
-       _("couldn't allocate memory for incore realtime bitmap.\n"));
-
-       wordcnt = libxfs_rtsummary_wordcount(mp, mp->m_rsumlevels,
-                       mp->m_sb.sb_rbmblocks);
-       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(
@@ -75,58 +52,65 @@ 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;
+       union xfs_rtword_raw    *words;
+
+       btmcompute = calloc(libxfs_rtbitmap_wordcount(mp, mp->m_sb.sb_rextents),
+                       sizeof(union xfs_rtword_raw));
+       if (!btmcompute)
+               do_error(
+_("couldn't allocate memory for incore realtime bitmap.\n"));
+       words = btmcompute;
 
-       ASSERT(mp->m_rbmip == NULL);
+       sumcompute = calloc(libxfs_rtsummary_wordcount(mp, mp->m_rsumlevels,
+                       mp->m_sb.sb_rbmblocks), 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;
@@ -137,10 +121,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);
        }
 
@@ -148,8 +134,6 @@ generate_rtinfo(
                do_warn(_("sb_frextents %" PRIu64 ", counted %" PRIu64 "\n"),
                                mp->m_sb.sb_frextents, sb_frextents);
        }
-
-       return(0);
 }
 
 static void
index 256ba0a73cb3e50f2b3d9ed53ad344d077e84f08..bbb27e88dc168248ae795313d6be53478ff318ca 100644 (file)
@@ -6,14 +6,7 @@
 #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 check_rtsuper(struct xfs_mount *mp);