All of lore.kernel.org
 help / color / mirror / Atom feed
From: Brian Foster <bfoster@redhat.com>
To: "Darrick J. Wong" <darrick.wong@oracle.com>
Cc: linux-xfs@vger.kernel.org, Dave Chinner <dchinner@redhat.com>
Subject: Re: [PATCH 3/8] xfs: check inobt record alignment on big block filesystems
Date: Fri, 4 Jan 2019 13:31:12 -0500	[thread overview]
Message-ID: <20190104183111.GE16751@bfoster> (raw)
In-Reply-To: <154630852589.14372.6446270754079238669.stgit@magnolia>

On Mon, Dec 31, 2018 at 06:08:45PM -0800, Darrick J. Wong wrote:
> From: Darrick J. Wong <darrick.wong@oracle.com>
> 
> On a big block filesystem, there may be multiple inobt records covering
> a single inode cluster.  These records obviously won't be aligned to
> cluster alignment rules, and they must cover the entire cluster.  Teach
> scrub to check for these things.
> 
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> Reviewed-by: Dave Chinner <dchinner@redhat.com>
> ---

Reviewed-by: Brian Foster <bfoster@redhat.com>

>  fs/xfs/scrub/ialloc.c |   41 +++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 41 insertions(+)
> 
> 
> diff --git a/fs/xfs/scrub/ialloc.c b/fs/xfs/scrub/ialloc.c
> index 5082331d6c03..5e593e4292b2 100644
> --- a/fs/xfs/scrub/ialloc.c
> +++ b/fs/xfs/scrub/ialloc.c
> @@ -47,6 +47,12 @@ xchk_setup_ag_iallocbt(
>  struct xchk_iallocbt {
>  	/* Number of inodes we see while scanning inobt. */
>  	unsigned long long	inodes;
> +
> +	/* Expected next startino, for big block filesystems. */
> +	xfs_agino_t		next_startino;
> +
> +	/* Expected end of the current inode cluster. */
> +	xfs_agino_t		next_cluster_ino;
>  };
>  
>  /*
> @@ -272,6 +278,7 @@ xchk_iallocbt_rec_alignment(
>  	struct xfs_inobt_rec_incore	*irec)
>  {
>  	struct xfs_mount		*mp = bs->sc->mp;
> +	struct xchk_iallocbt		*iabt = bs->private;
>  
>  	/*
>  	 * finobt records have different positioning requirements than inobt
> @@ -289,6 +296,27 @@ xchk_iallocbt_rec_alignment(
>  		return;
>  	}
>  
> +	if (iabt->next_startino != NULLAGINO) {
> +		/*
> +		 * We're midway through a cluster of inodes that is mapped by
> +		 * multiple inobt records.  Did we get the record for the next
> +		 * irec in the sequence?
> +		 */
> +		if (irec->ir_startino != iabt->next_startino) {
> +			xchk_btree_set_corrupt(bs->sc, bs->cur, 0);
> +			return;
> +		}
> +
> +		iabt->next_startino += XFS_INODES_PER_CHUNK;
> +
> +		/* Are we done with the cluster? */
> +		if (iabt->next_startino >= iabt->next_cluster_ino) {
> +			iabt->next_startino = NULLAGINO;
> +			iabt->next_cluster_ino = NULLAGINO;
> +		}
> +		return;
> +	}
> +
>  	/* inobt records must be aligned to cluster and inoalignmnt size. */
>  	if (irec->ir_startino & (mp->m_cluster_align_inodes - 1)) {
>  		xchk_btree_set_corrupt(bs->sc, bs->cur, 0);
> @@ -299,6 +327,17 @@ xchk_iallocbt_rec_alignment(
>  		xchk_btree_set_corrupt(bs->sc, bs->cur, 0);
>  		return;
>  	}
> +
> +	if (mp->m_inodes_per_cluster <= XFS_INODES_PER_CHUNK)
> +		return;
> +
> +	/*
> +	 * If this is the start of an inode cluster that can be mapped by
> +	 * multiple inobt records, the next inobt record must follow exactly
> +	 * after this one.
> +	 */
> +	iabt->next_startino = irec->ir_startino + XFS_INODES_PER_CHUNK;
> +	iabt->next_cluster_ino = irec->ir_startino + mp->m_inodes_per_cluster;
>  }
>  
>  /* Scrub an inobt/finobt record. */
> @@ -463,6 +502,8 @@ xchk_iallocbt(
>  	struct xfs_btree_cur	*cur;
>  	struct xchk_iallocbt	iabt = {
>  		.inodes		= 0,
> +		.next_startino	= NULLAGINO,
> +		.next_cluster_ino = NULLAGINO,
>  	};
>  	int			error;
>  
> 

  reply	other threads:[~2019-01-04 18:31 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-01  2:08 [PATCH 0/8] xfs: inode scrubber fixes Darrick J. Wong
2019-01-01  2:08 ` [PATCH 1/8] xfs: never try to scrub more than 64 inodes per inobt record Darrick J. Wong
2019-01-02 12:39   ` Carlos Maiolino
2019-01-02 13:30     ` Chandan Rajendra
2019-01-04 18:30   ` Brian Foster
2019-01-01  2:08 ` [PATCH 2/8] xfs: check the ir_startino alignment directly Darrick J. Wong
2019-01-04 18:31   ` Brian Foster
2019-01-04 20:59     ` Darrick J. Wong
2019-01-07 13:45       ` Brian Foster
2019-01-08  1:43         ` Darrick J. Wong
2019-01-08 12:47           ` Brian Foster
2019-01-08 18:28             ` Darrick J. Wong
2019-01-08 19:00               ` Brian Foster
2019-01-01  2:08 ` [PATCH 3/8] xfs: check inobt record alignment on big block filesystems Darrick J. Wong
2019-01-04 18:31   ` Brian Foster [this message]
2019-01-01  2:08 ` [PATCH 4/8] xfs: hoist inode cluster checks out of loop Darrick J. Wong
2019-01-04 18:31   ` Brian Foster
2019-01-01  2:08 ` [PATCH 5/8] xfs: clean up the inode cluster checking in the inobt scrub Darrick J. Wong
2019-01-04 18:32   ` Brian Foster
2019-01-04 22:02     ` Darrick J. Wong
2019-01-01  2:09 ` [PATCH 6/8] xfs: scrub big block inode btrees correctly Darrick J. Wong
2019-01-04 18:38   ` Brian Foster
2019-01-05  0:29     ` Darrick J. Wong
2019-01-07 13:45       ` Brian Foster
2019-01-08  2:03         ` Darrick J. Wong
2019-01-01  2:09 ` [PATCH 7/8] xfs: abort xattr scrub if fatal signals are pending Darrick J. Wong
2019-01-04 18:39   ` Brian Foster
2019-01-01  2:09 ` [PATCH 8/8] xfs: scrub should flag dir/attr offsets that aren't mappable with xfs_dablk_t Darrick J. Wong
2019-01-04 18:39   ` Brian Foster
2019-01-04 23:09     ` 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=20190104183111.GE16751@bfoster \
    --to=bfoster@redhat.com \
    --cc=darrick.wong@oracle.com \
    --cc=dchinner@redhat.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.