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
Subject: Re: [PATCH 6/7] xfs: scrub big block inode btrees correctly
Date: Wed, 9 Jan 2019 08:32:36 -0500	[thread overview]
Message-ID: <20190109133236.GB13613@bfoster> (raw)
In-Reply-To: <154697959265.2494.12997637561160260241.stgit@magnolia>

On Tue, Jan 08, 2019 at 12:33:12PM -0800, Darrick J. Wong wrote:
> From: Darrick J. Wong <darrick.wong@oracle.com>
> 
> Teach scrub how to handle the case that there are one or more inobt
> records covering a given inode cluster.  This fixes the operation on big
> block filesystems (e.g. 64k blocks, 512 byte inodes).
> 
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> ---

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

>  fs/xfs/scrub/ialloc.c |   10 +++++++++-
>  1 file changed, 9 insertions(+), 1 deletion(-)
> 
> 
> diff --git a/fs/xfs/scrub/ialloc.c b/fs/xfs/scrub/ialloc.c
> index 708f6607db71..1929d79ea6b3 100644
> --- a/fs/xfs/scrub/ialloc.c
> +++ b/fs/xfs/scrub/ialloc.c
> @@ -162,6 +162,7 @@ xchk_iallocbt_check_cluster_ifree(
>  	xfs_ino_t			fsino;
>  	xfs_agino_t			agino;
>  	unsigned int			offset;
> +	unsigned int			cluster_buf_base;
>  	bool				irec_free;
>  	bool				ino_inuse;
>  	bool				freemask_ok;
> @@ -174,10 +175,17 @@ xchk_iallocbt_check_cluster_ifree(
>  	 * Given an inobt record, an offset of a cluster within the record, and
>  	 * an offset of an inode within a cluster, compute which fs inode we're
>  	 * talking about and the offset of that inode within the buffer.
> +	 *
> +	 * Be careful about inobt records that don't align with the start of
> +	 * the inode buffer when block sizes are large enough to hold multiple
> +	 * inode chunks.  When this happens, cluster_base will be zero but
> +	 * ir_startino can be large enough to make cluster_buf_base nonzero.
>  	 */
>  	agino = irec->ir_startino + cluster_base + cluster_index;
>  	fsino = XFS_AGINO_TO_INO(mp, bs->cur->bc_private.a.agno, agino);
> -	offset = cluster_index * mp->m_sb.sb_inodesize;
> +	cluster_buf_base = XFS_INO_TO_OFFSET(mp, irec->ir_startino);
> +	ASSERT(cluster_buf_base == 0 || cluster_base == 0);
> +	offset = (cluster_buf_base + cluster_index) * mp->m_sb.sb_inodesize;
>  	if (offset >= BBTOB(cluster_bp->b_length)) {
>  		xchk_btree_set_corrupt(bs->sc, bs->cur, 0);
>  		goto out;
> 

  reply	other threads:[~2019-01-09 13:32 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-08 20:32 [PATCH v2 0/7] xfs: inode scrubber fixes Darrick J. Wong
2019-01-08 20:32 ` [PATCH 1/7] xfs: never try to scrub more than 64 inodes per inobt record Darrick J. Wong
2019-01-08 20:32 ` [PATCH 2/7] xfs: check the ir_startino alignment directly Darrick J. Wong
2019-01-09 13:32   ` Brian Foster
2019-01-09 16:37     ` Darrick J. Wong
2019-01-09 16:48       ` Brian Foster
2019-01-08 20:32 ` [PATCH 3/7] xfs: check inobt record alignment on big block filesystems Darrick J. Wong
2019-01-08 20:33 ` [PATCH 4/7] xfs: hoist inode cluster checks out of loop Darrick J. Wong
2019-01-08 20:33 ` [PATCH 5/7] xfs: clean up the inode cluster checking in the inobt scrub Darrick J. Wong
2019-01-08 20:33 ` [PATCH 6/7] xfs: scrub big block inode btrees correctly Darrick J. Wong
2019-01-09 13:32   ` Brian Foster [this message]
2019-01-08 20:33 ` [PATCH 7/7] xfs: consolidate scrub dinode mapping code into a single function Darrick J. Wong
2019-01-09 13:33   ` Brian Foster

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=20190109133236.GB13613@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.