From: Brian Foster <bfoster@redhat.com>
To: "Darrick J. Wong" <darrick.wong@oracle.com>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH 03/10] xfs: add xfs_verify_agino_or_null helper
Date: Mon, 4 Feb 2019 14:24:59 -0500 [thread overview]
Message-ID: <20190204192458.GC47560@bfoster> (raw)
In-Reply-To: <154930316106.31814.17027370821230009757.stgit@magnolia>
On Mon, Feb 04, 2019 at 09:59:21AM -0800, Darrick J. Wong wrote:
> From: Darrick J. Wong <darrick.wong@oracle.com>
>
> Add a new helper to check that a per-AG inode pointer is either null or
> points somewhere valid within that AG.
>
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> ---
Reviewed-by: Brian Foster <bfoster@redhat.com>
> fs/xfs/libxfs/xfs_inode_buf.c | 3 +--
> fs/xfs/libxfs/xfs_types.c | 13 +++++++++++++
> fs/xfs/libxfs/xfs_types.h | 2 ++
> fs/xfs/scrub/agheader.c | 8 +++-----
> 4 files changed, 19 insertions(+), 7 deletions(-)
>
>
> diff --git a/fs/xfs/libxfs/xfs_inode_buf.c b/fs/xfs/libxfs/xfs_inode_buf.c
> index 8fa1050c1ae2..77e412a4b6ea 100644
> --- a/fs/xfs/libxfs/xfs_inode_buf.c
> +++ b/fs/xfs/libxfs/xfs_inode_buf.c
> @@ -99,8 +99,7 @@ xfs_inode_buf_verify(
> unlinked_ino = be32_to_cpu(dip->di_next_unlinked);
> di_ok = dip->di_magic == cpu_to_be16(XFS_DINODE_MAGIC) &&
> xfs_dinode_good_version(mp, dip->di_version) &&
> - (unlinked_ino == NULLAGINO ||
> - xfs_verify_agino(mp, agno, unlinked_ino));
> + xfs_verify_agino_or_null(mp, agno, unlinked_ino);
> if (unlikely(XFS_TEST_ERROR(!di_ok, mp,
> XFS_ERRTAG_ITOBP_INOTOBP))) {
> if (readahead) {
> diff --git a/fs/xfs/libxfs/xfs_types.c b/fs/xfs/libxfs/xfs_types.c
> index 0e35b4bdfef7..5b37c99b2811 100644
> --- a/fs/xfs/libxfs/xfs_types.c
> +++ b/fs/xfs/libxfs/xfs_types.c
> @@ -115,6 +115,19 @@ xfs_verify_agino(
> return agino >= first && agino <= last;
> }
>
> +/*
> + * Verify that an AG inode number pointer neither points outside the AG
> + * nor points at static metadata, or is NULLAGINO.
> + */
> +bool
> +xfs_verify_agino_or_null(
> + struct xfs_mount *mp,
> + xfs_agnumber_t agno,
> + xfs_agino_t agino)
> +{
> + return agino == NULLAGINO || xfs_verify_agino(mp, agno, agino);
> +}
> +
> /*
> * Verify that an FS inode number pointer neither points outside the
> * filesystem nor points at static AG metadata.
> diff --git a/fs/xfs/libxfs/xfs_types.h b/fs/xfs/libxfs/xfs_types.h
> index 704b4f308780..c5a25403b4db 100644
> --- a/fs/xfs/libxfs/xfs_types.h
> +++ b/fs/xfs/libxfs/xfs_types.h
> @@ -183,6 +183,8 @@ 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_agino_or_null(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);
> diff --git a/fs/xfs/scrub/agheader.c b/fs/xfs/scrub/agheader.c
> index 90955ab1e895..9d4e8293d37e 100644
> --- a/fs/xfs/scrub/agheader.c
> +++ b/fs/xfs/scrub/agheader.c
> @@ -864,19 +864,17 @@ xchk_agi(
>
> /* Check inode pointers */
> agino = be32_to_cpu(agi->agi_newino);
> - if (agino != NULLAGINO && !xfs_verify_agino(mp, agno, agino))
> + if (!xfs_verify_agino_or_null(mp, agno, agino))
> xchk_block_set_corrupt(sc, sc->sa.agi_bp);
>
> agino = be32_to_cpu(agi->agi_dirino);
> - if (agino != NULLAGINO && !xfs_verify_agino(mp, agno, agino))
> + if (!xfs_verify_agino_or_null(mp, agno, agino))
> xchk_block_set_corrupt(sc, sc->sa.agi_bp);
>
> /* Check unlinked inode buckets */
> for (i = 0; i < XFS_AGI_UNLINKED_BUCKETS; i++) {
> agino = be32_to_cpu(agi->agi_unlinked[i]);
> - if (agino == NULLAGINO)
> - continue;
> - if (!xfs_verify_agino(mp, agno, agino))
> + if (!xfs_verify_agino_or_null(mp, agno, agino))
> xchk_block_set_corrupt(sc, sc->sa.agi_bp);
> }
>
>
next prev parent reply other threads:[~2019-02-04 19:25 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-04 17:58 [PATCH v2 00/10] xfs: incore unlinked list Darrick J. Wong
2019-02-04 17:59 ` [PATCH 01/10] xfs: clean up iunlink functions Darrick J. Wong
2019-02-04 19:24 ` Brian Foster
2019-02-04 20:51 ` Christoph Hellwig
2019-02-04 17:59 ` [PATCH 02/10] xfs: track unlinked inode counts in per-ag data Darrick J. Wong
2019-02-04 19:24 ` Brian Foster
2019-02-04 20:53 ` Christoph Hellwig
2019-02-05 0:26 ` Darrick J. Wong
2019-02-05 6:55 ` Christoph Hellwig
2019-02-05 7:07 ` Darrick J. Wong
2019-02-05 0:42 ` Darrick J. Wong
2019-02-04 17:59 ` [PATCH 03/10] xfs: add xfs_verify_agino_or_null helper Darrick J. Wong
2019-02-04 19:24 ` Brian Foster [this message]
2019-02-04 20:53 ` Christoph Hellwig
2019-02-04 17:59 ` [PATCH 04/10] xfs: refactor AGI unlinked bucket updates Darrick J. Wong
2019-02-04 19:25 ` Brian Foster
2019-02-04 20:54 ` Christoph Hellwig
2019-02-04 17:59 ` [PATCH 05/10] xfs: strengthen AGI unlinked inode bucket pointer checks Darrick J. Wong
2019-02-04 17:59 ` [PATCH 06/10] xfs: refactor inode unlinked pointer update functions Darrick J. Wong
2019-02-04 20:56 ` Christoph Hellwig
2019-02-04 21:49 ` Darrick J. Wong
2019-02-05 14:23 ` Brian Foster
2019-02-04 17:59 ` [PATCH 07/10] xfs: refactor unlinked list search and mapping to a separate function Darrick J. Wong
2019-02-04 20:58 ` Christoph Hellwig
2019-02-04 22:23 ` Darrick J. Wong
2019-02-04 17:59 ` [PATCH 08/10] xfs: refactor inode update in iunlink_remove Darrick J. Wong
2019-02-04 20:58 ` Christoph Hellwig
2019-02-05 14:23 ` Brian Foster
2019-02-04 17:59 ` [PATCH 09/10] xfs: add tracepoints for high level iunlink operations Darrick J. Wong
2019-02-04 20:59 ` Christoph Hellwig
2019-02-05 14:24 ` Brian Foster
2019-02-04 18:00 ` [PATCH 10/10] xfs: cache unlinked pointers in an rhashtable Darrick J. Wong
2019-02-04 21:08 ` Christoph Hellwig
2019-02-05 1:02 ` Darrick J. Wong
2019-02-05 14:24 ` Brian Foster
2019-02-05 17:53 ` Darrick J. Wong
2019-02-05 17:57 ` Christoph Hellwig
2019-02-05 18:17 ` Darrick J. Wong
2019-02-05 19:06 ` Brian Foster
2019-02-05 19:20 ` Darrick J. Wong
2019-02-05 20:59 ` Dave Chinner
2019-02-06 18:25 ` Darrick J. Wong
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=20190204192458.GC47560@bfoster \
--to=bfoster@redhat.com \
--cc=darrick.wong@oracle.com \
--cc=linux-xfs@vger.kernel.org \
/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.