]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs: move various type verifiers to common file
authorDave Chinner <dchinner@redhat.com>
Thu, 28 Jun 2018 20:11:58 +0000 (15:11 -0500)
committerEric Sandeen <sandeen@redhat.com>
Thu, 28 Jun 2018 20:11:58 +0000 (15:11 -0500)
Source kernel commit: 86210fbebae6e60b1158ccd6b47ee7ae1abf5b2c

New verification functions like xfs_verify_fsbno() and
xfs_verify_agino() are spread across multiple files and different
header files. They really don't fit cleanly into the places they've
been put, and have wider scope than the current header includes.

Move the type verifiers to a new file in libxfs (xfs-types.c) and
the prototypes to xfs_types.h where they will be visible to all the
code that uses the types.

Signed-Off-By: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
libxfs/Makefile
libxfs/xfs_alloc.c
libxfs/xfs_alloc.h
libxfs/xfs_ialloc.c
libxfs/xfs_ialloc.h
libxfs/xfs_rtbitmap.c
libxfs/xfs_types.c [new file with mode: 0644]
libxfs/xfs_types.h

index 17a1461391b456f83929604408380d27cbc36d41..42ce0f8a37f611f73963042498bf3833ee7212d3 100644 (file)
@@ -96,7 +96,8 @@ CFILES = cache.c \
        xfs_rtbitmap.c \
        xfs_sb.c \
        xfs_symlink_remote.c \
-       xfs_trans_resv.c
+       xfs_trans_resv.c \
+       xfs_types.c
 
 LSRCFILES += gen_crc32table.c
 
index 4e94084fdd80757ba9a5d9b0d51d1a567498b006..20b714121e438625d08d4b25ffe972bfb088fab2 100644 (file)
@@ -3120,55 +3120,6 @@ xfs_alloc_query_all(
        return xfs_btree_query_all(cur, xfs_alloc_query_range_helper, &query);
 }
 
-/* Find the size of the AG, in blocks. */
-xfs_agblock_t
-xfs_ag_block_count(
-       struct xfs_mount        *mp,
-       xfs_agnumber_t          agno)
-{
-       ASSERT(agno < mp->m_sb.sb_agcount);
-
-       if (agno < mp->m_sb.sb_agcount - 1)
-               return mp->m_sb.sb_agblocks;
-       return mp->m_sb.sb_dblocks - (agno * mp->m_sb.sb_agblocks);
-}
-
-/*
- * Verify that an AG block number pointer neither points outside the AG
- * nor points at static metadata.
- */
-bool
-xfs_verify_agbno(
-       struct xfs_mount        *mp,
-       xfs_agnumber_t          agno,
-       xfs_agblock_t           agbno)
-{
-       xfs_agblock_t           eoag;
-
-       eoag = xfs_ag_block_count(mp, agno);
-       if (agbno >= eoag)
-               return false;
-       if (agbno <= XFS_AGFL_BLOCK(mp))
-               return false;
-       return true;
-}
-
-/*
- * Verify that an FS block number pointer neither points outside the
- * filesystem nor points at static AG metadata.
- */
-bool
-xfs_verify_fsbno(
-       struct xfs_mount        *mp,
-       xfs_fsblock_t           fsbno)
-{
-       xfs_agnumber_t          agno = XFS_FSB_TO_AGNO(mp, fsbno);
-
-       if (agno >= mp->m_sb.sb_agcount)
-               return false;
-       return xfs_verify_agbno(mp, agno, XFS_FSB_TO_AGBNO(mp, fsbno));
-}
-
 /* Is there a record covering a given extent? */
 int
 xfs_alloc_has_record(
index 1651d924aaf15a576e5455df2d52b3e09b2b4bdf..e716c993ac4c5b6a52d9f42ea6fa5459bd796a20 100644 (file)
@@ -242,10 +242,6 @@ int xfs_alloc_query_range(struct xfs_btree_cur *cur,
                xfs_alloc_query_range_fn fn, void *priv);
 int xfs_alloc_query_all(struct xfs_btree_cur *cur, xfs_alloc_query_range_fn fn,
                void *priv);
-xfs_agblock_t xfs_ag_block_count(struct xfs_mount *mp, xfs_agnumber_t agno);
-bool xfs_verify_agbno(struct xfs_mount *mp, xfs_agnumber_t agno,
-               xfs_agblock_t agbno);
-bool xfs_verify_fsbno(struct xfs_mount *mp, xfs_fsblock_t fsbno);
 
 int xfs_alloc_has_record(struct xfs_btree_cur *cur, xfs_agblock_t bno,
                xfs_extlen_t len, bool *exist);
index 464574a59f5d7341adaa5044b23697e98acd4a1c..dd19e97083e47646561bc8f40ed8f83337447bf6 100644 (file)
@@ -2668,96 +2668,6 @@ xfs_ialloc_pagi_init(
        return 0;
 }
 
-/* Calculate the first and last possible inode number in an AG. */
-void
-xfs_ialloc_agino_range(
-       struct xfs_mount        *mp,
-       xfs_agnumber_t          agno,
-       xfs_agino_t             *first,
-       xfs_agino_t             *last)
-{
-       xfs_agblock_t           bno;
-       xfs_agblock_t           eoag;
-
-       eoag = xfs_ag_block_count(mp, agno);
-
-       /*
-        * Calculate the first inode, which will be in the first
-        * cluster-aligned block after the AGFL.
-        */
-       bno = round_up(XFS_AGFL_BLOCK(mp) + 1,
-                       xfs_ialloc_cluster_alignment(mp));
-       *first = XFS_OFFBNO_TO_AGINO(mp, bno, 0);
-
-       /*
-        * Calculate the last inode, which will be at the end of the
-        * last (aligned) cluster that can be allocated in the AG.
-        */
-       bno = round_down(eoag, xfs_ialloc_cluster_alignment(mp));
-       *last = XFS_OFFBNO_TO_AGINO(mp, bno, 0) - 1;
-}
-
-/*
- * Verify that an AG inode number pointer neither points outside the AG
- * nor points at static metadata.
- */
-bool
-xfs_verify_agino(
-       struct xfs_mount        *mp,
-       xfs_agnumber_t          agno,
-       xfs_agino_t             agino)
-{
-       xfs_agino_t             first;
-       xfs_agino_t             last;
-
-       xfs_ialloc_agino_range(mp, agno, &first, &last);
-       return agino >= first && agino <= last;
-}
-
-/*
- * Verify that an FS inode number pointer neither points outside the
- * filesystem nor points at static AG metadata.
- */
-bool
-xfs_verify_ino(
-       struct xfs_mount        *mp,
-       xfs_ino_t               ino)
-{
-       xfs_agnumber_t          agno = XFS_INO_TO_AGNO(mp, ino);
-       xfs_agino_t             agino = XFS_INO_TO_AGINO(mp, ino);
-
-       if (agno >= mp->m_sb.sb_agcount)
-               return false;
-       if (XFS_AGINO_TO_INO(mp, agno, agino) != ino)
-               return false;
-       return xfs_verify_agino(mp, agno, agino);
-}
-
-/* Is this an internal inode number? */
-bool
-xfs_internal_inum(
-       struct xfs_mount        *mp,
-       xfs_ino_t               ino)
-{
-       return ino == mp->m_sb.sb_rbmino || ino == mp->m_sb.sb_rsumino ||
-               (xfs_sb_version_hasquota(&mp->m_sb) &&
-                xfs_is_quota_inode(&mp->m_sb, ino));
-}
-
-/*
- * Verify that a directory entry's inode number doesn't point at an internal
- * inode, empty space, or static AG metadata.
- */
-bool
-xfs_verify_dir_ino(
-       struct xfs_mount        *mp,
-       xfs_ino_t               ino)
-{
-       if (xfs_internal_inum(mp, ino))
-               return false;
-       return xfs_verify_ino(mp, ino);
-}
-
 /* Is there an inode record covering a given range of inode numbers? */
 int
 xfs_ialloc_has_inode_record(
index 144f3eac9b93a5e9a9f7e38b20b387e2c40dec41..90b09c5f163bdf323314ec4a02b5993611f6af1f 100644 (file)
@@ -169,12 +169,5 @@ int xfs_inobt_insert_rec(struct xfs_btree_cur *cur, uint16_t holemask,
                int *stat);
 
 int xfs_ialloc_cluster_alignment(struct xfs_mount *mp);
-void xfs_ialloc_agino_range(struct xfs_mount *mp, xfs_agnumber_t agno,
-               xfs_agino_t *first, xfs_agino_t *last);
-bool xfs_verify_agino(struct xfs_mount *mp, xfs_agnumber_t agno,
-               xfs_agino_t agino);
-bool xfs_verify_ino(struct xfs_mount *mp, xfs_ino_t ino);
-bool xfs_internal_inum(struct xfs_mount *mp, xfs_ino_t ino);
-bool xfs_verify_dir_ino(struct xfs_mount *mp, xfs_ino_t ino);
 
 #endif /* __XFS_IALLOC_H__ */
index c7a0ceebbce6a7e3d95b8917d7f345d53b337d94..766ae8cdcba4b50aefecf277f12b17e880b0eb39 100644 (file)
@@ -1075,18 +1075,6 @@ xfs_rtalloc_query_all(
        return xfs_rtalloc_query_range(tp, &keys[0], &keys[1], fn, priv);
 }
 
-/*
- * Verify that an realtime block number pointer doesn't point off the
- * end of the realtime device.
- */
-bool
-xfs_verify_rtbno(
-       struct xfs_mount        *mp,
-       xfs_rtblock_t           rtbno)
-{
-       return rtbno < mp->m_sb.sb_rblocks;
-}
-
 /* Is the given extent all free? */
 int
 xfs_rtalloc_extent_is_free(
diff --git a/libxfs/xfs_types.c b/libxfs/xfs_types.c
new file mode 100644 (file)
index 0000000..875491e
--- /dev/null
@@ -0,0 +1,173 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2000-2002,2005 Silicon Graphics, Inc.
+ * Copyright (C) 2017 Oracle.
+ * All Rights Reserved.
+ */
+#include "libxfs_priv.h"
+#include "xfs_fs.h"
+#include "xfs_format.h"
+#include "xfs_log_format.h"
+#include "xfs_shared.h"
+#include "xfs_trans_resv.h"
+#include "xfs_bit.h"
+#include "xfs_sb.h"
+#include "xfs_mount.h"
+#include "xfs_defer.h"
+#include "xfs_inode.h"
+#include "xfs_btree.h"
+#include "xfs_rmap.h"
+#include "xfs_alloc_btree.h"
+#include "xfs_alloc.h"
+#include "xfs_ialloc.h"
+
+/* Find the size of the AG, in blocks. */
+xfs_agblock_t
+xfs_ag_block_count(
+       struct xfs_mount        *mp,
+       xfs_agnumber_t          agno)
+{
+       ASSERT(agno < mp->m_sb.sb_agcount);
+
+       if (agno < mp->m_sb.sb_agcount - 1)
+               return mp->m_sb.sb_agblocks;
+       return mp->m_sb.sb_dblocks - (agno * mp->m_sb.sb_agblocks);
+}
+
+/*
+ * Verify that an AG block number pointer neither points outside the AG
+ * nor points at static metadata.
+ */
+bool
+xfs_verify_agbno(
+       struct xfs_mount        *mp,
+       xfs_agnumber_t          agno,
+       xfs_agblock_t           agbno)
+{
+       xfs_agblock_t           eoag;
+
+       eoag = xfs_ag_block_count(mp, agno);
+       if (agbno >= eoag)
+               return false;
+       if (agbno <= XFS_AGFL_BLOCK(mp))
+               return false;
+       return true;
+}
+
+/*
+ * Verify that an FS block number pointer neither points outside the
+ * filesystem nor points at static AG metadata.
+ */
+bool
+xfs_verify_fsbno(
+       struct xfs_mount        *mp,
+       xfs_fsblock_t           fsbno)
+{
+       xfs_agnumber_t          agno = XFS_FSB_TO_AGNO(mp, fsbno);
+
+       if (agno >= mp->m_sb.sb_agcount)
+               return false;
+       return xfs_verify_agbno(mp, agno, XFS_FSB_TO_AGBNO(mp, fsbno));
+}
+
+/* Calculate the first and last possible inode number in an AG. */
+void
+xfs_agino_range(
+       struct xfs_mount        *mp,
+       xfs_agnumber_t          agno,
+       xfs_agino_t             *first,
+       xfs_agino_t             *last)
+{
+       xfs_agblock_t           bno;
+       xfs_agblock_t           eoag;
+
+       eoag = xfs_ag_block_count(mp, agno);
+
+       /*
+        * Calculate the first inode, which will be in the first
+        * cluster-aligned block after the AGFL.
+        */
+       bno = round_up(XFS_AGFL_BLOCK(mp) + 1,
+                       xfs_ialloc_cluster_alignment(mp));
+       *first = XFS_OFFBNO_TO_AGINO(mp, bno, 0);
+
+       /*
+        * Calculate the last inode, which will be at the end of the
+        * last (aligned) cluster that can be allocated in the AG.
+        */
+       bno = round_down(eoag, xfs_ialloc_cluster_alignment(mp));
+       *last = XFS_OFFBNO_TO_AGINO(mp, bno, 0) - 1;
+}
+
+/*
+ * Verify that an AG inode number pointer neither points outside the AG
+ * nor points at static metadata.
+ */
+bool
+xfs_verify_agino(
+       struct xfs_mount        *mp,
+       xfs_agnumber_t          agno,
+       xfs_agino_t             agino)
+{
+       xfs_agino_t             first;
+       xfs_agino_t             last;
+
+       xfs_agino_range(mp, agno, &first, &last);
+       return agino >= first && agino <= last;
+}
+
+/*
+ * Verify that an FS inode number pointer neither points outside the
+ * filesystem nor points at static AG metadata.
+ */
+bool
+xfs_verify_ino(
+       struct xfs_mount        *mp,
+       xfs_ino_t               ino)
+{
+       xfs_agnumber_t          agno = XFS_INO_TO_AGNO(mp, ino);
+       xfs_agino_t             agino = XFS_INO_TO_AGINO(mp, ino);
+
+       if (agno >= mp->m_sb.sb_agcount)
+               return false;
+       if (XFS_AGINO_TO_INO(mp, agno, agino) != ino)
+               return false;
+       return xfs_verify_agino(mp, agno, agino);
+}
+
+/* Is this an internal inode number? */
+bool
+xfs_internal_inum(
+       struct xfs_mount        *mp,
+       xfs_ino_t               ino)
+{
+       return ino == mp->m_sb.sb_rbmino || ino == mp->m_sb.sb_rsumino ||
+               (xfs_sb_version_hasquota(&mp->m_sb) &&
+                xfs_is_quota_inode(&mp->m_sb, ino));
+}
+
+/*
+ * Verify that a directory entry's inode number doesn't point at an internal
+ * inode, empty space, or static AG metadata.
+ */
+bool
+xfs_verify_dir_ino(
+       struct xfs_mount        *mp,
+       xfs_ino_t               ino)
+{
+       if (xfs_internal_inum(mp, ino))
+               return false;
+       return xfs_verify_ino(mp, ino);
+}
+
+/*
+ * Verify that an realtime block number pointer doesn't point off the
+ * end of the realtime device.
+ */
+bool
+xfs_verify_rtbno(
+       struct xfs_mount        *mp,
+       xfs_rtblock_t           rtbno)
+{
+       return rtbno < mp->m_sb.sb_rblocks;
+}
index b72ae343140e9483a7a37b06121f35934df06d06..4055d62f690c380235169732c66de76842578fc0 100644 (file)
@@ -147,4 +147,23 @@ typedef struct xfs_bmbt_irec
        xfs_exntst_t    br_state;       /* extent state */
 } xfs_bmbt_irec_t;
 
+/*
+ * Type verifier functions
+ */
+struct xfs_mount;
+
+xfs_agblock_t xfs_ag_block_count(struct xfs_mount *mp, xfs_agnumber_t agno);
+bool xfs_verify_agbno(struct xfs_mount *mp, xfs_agnumber_t agno,
+               xfs_agblock_t agbno);
+bool xfs_verify_fsbno(struct xfs_mount *mp, xfs_fsblock_t fsbno);
+
+void xfs_agino_range(struct xfs_mount *mp, xfs_agnumber_t agno,
+               xfs_agino_t *first, xfs_agino_t *last);
+bool xfs_verify_agino(struct xfs_mount *mp, xfs_agnumber_t agno,
+               xfs_agino_t agino);
+bool xfs_verify_ino(struct xfs_mount *mp, xfs_ino_t ino);
+bool xfs_internal_inum(struct xfs_mount *mp, xfs_ino_t ino);
+bool xfs_verify_dir_ino(struct xfs_mount *mp, xfs_ino_t ino);
+bool xfs_verify_rtbno(struct xfs_mount *mp, xfs_rtblock_t rtbno);
+
 #endif /* __XFS_TYPES_H__ */