All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: Dave Chinner <david@fromorbit.com>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH v2 19/21] xfs: cross-reference refcount btree during scrub
Date: Mon, 15 Jan 2018 22:52:44 -0800	[thread overview]
Message-ID: <20180116065244.GJ5602@magnolia> (raw)
In-Reply-To: <20180116024447.GE16421@dastard>

On Tue, Jan 16, 2018 at 01:44:47PM +1100, Dave Chinner wrote:
> On Tue, Jan 09, 2018 at 01:25:47PM -0800, Darrick J. Wong wrote:
> > From: Darrick J. Wong <darrick.wong@oracle.com>
> > 
> > During metadata btree scrub, we should cross-reference with the
> > reference counts.
> > 
> > Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> > ---
> > v2: streamline scrubber arguments, remove stack allocated objects
> > ---
> 
> ....
> 
> > +/* Make sure the refcount records match this data fork extent. */
> > +STATIC void
> > +xfs_scrub_bmap_xref_refcount_data(
> > +	struct xfs_scrub_bmap_info	*info,
> > +	struct xfs_bmbt_irec		*irec,
> > +	xfs_fsblock_t			bno)
> 
> What's in the irec if it's not the block number of the extent we
> are looking up?
> 
> Actually, I may have just answered that myself: bno is actually
> an agbno, not an fsbno. So that should be:
> 
> 	xfs_agblock_t			agbno)

Er... Yes.  Oops, will fix (all of the agbno).
> 
> > +{
> > +	xfs_agblock_t			fbno;
> > +	xfs_extlen_t			flen;
> > +	int				error;
> > +
> > +	if (!info->sc->sa.refc_cur)
> > +		return;
> > +
> > +	/* If this is shared, the inode flag must be set. */
> > +	error = xfs_refcount_find_shared(info->sc->sa.refc_cur, bno,
> > +			irec->br_blockcount, &fbno, &flen, false);
> > +	if (!xfs_scrub_should_check_xref(info->sc, &error,
> > +			&info->sc->sa.refc_cur))
> > +		return;
> > +
> > +	if (flen != 0 && !xfs_is_reflink_inode(info->sc->ip))
> > +		xfs_scrub_fblock_xref_set_corrupt(info->sc, info->whichfork,
> > +				irec->br_startoff);
> 
> So is the block corrupt or is the inode flags corrupt? What
> determines the object we mark as corrupt/needing fixing here?

Hmm.  The reflink iflag is broken here, because the iflag is only supposed
to represent a shortcut for "might any of the data fork blocks shared?"
Will change to the ino_xref_set_corrupt helper.

--D

> > +/* Make sure the refcount records match this attr fork extent. */
> > +STATIC void
> > +xfs_scrub_bmap_xref_refcount_attr(
> > +	struct xfs_scrub_bmap_info	*info,
> > +	struct xfs_bmbt_irec		*irec,
> > +	xfs_fsblock_t			bno)
> 
> agbno
> 
> > +{
> > +	xfs_agblock_t			fbno;
> > +	xfs_extlen_t			flen;
> > +	int				error;
> > +
> > +	if (!info->sc->sa.refc_cur)
> > +		return;
> > +
> > +	/* No shared attr fork extents */
> > +	error = xfs_refcount_find_shared(info->sc->sa.refc_cur, bno,
> > +			irec->br_blockcount, &fbno, &flen, false);
> > +	if (!xfs_scrub_should_check_xref(info->sc, &error,
> > +			&info->sc->sa.refc_cur))
> > +		return;
> > +
> > +	if (flen != 0)
> > +		xfs_scrub_fblock_xref_set_corrupt(info->sc, info->whichfork,
> > +				irec->br_startoff);
> > +}
> > +
> > +/* Make sure the refcount records match this CoW fork extent. */
> > +STATIC void
> > +xfs_scrub_bmap_xref_refcount_cow(
> > +	struct xfs_scrub_bmap_info	*info,
> > +	struct xfs_bmbt_irec		*irec,
> > +	xfs_fsblock_t			bno)
> 
> agbno
> 
> > +{
> > +	if (!info->sc->sa.refc_cur)
> > +		return;
> > +
> > +	xfs_scrub_xref_has_cow_staging(info->sc, bno, irec->br_blockcount);
> > +}
> > +
> >  /* Cross-reference a single rtdev extent record. */
> >  STATIC void
> >  xfs_scrub_bmap_rt_extent_xref(
> > @@ -243,6 +309,17 @@ xfs_scrub_bmap_extent_xref(
> >  	xfs_scrub_xref_is_used_space(info->sc, agbno, len);
> >  	xfs_scrub_xref_not_inodes(info->sc, agbno, len);
> >  	xfs_scrub_bmap_xref_rmap(info, irec, agbno);
> > +	switch (info->whichfork) {
> > +	case XFS_DATA_FORK:
> > +		xfs_scrub_bmap_xref_refcount_data(info, irec, agbno);
> > +		break;
> > +	case XFS_ATTR_FORK:
> > +		xfs_scrub_bmap_xref_refcount_attr(info, irec, agbno);
> > +		break;
> > +	case XFS_COW_FORK:
> > +		xfs_scrub_bmap_xref_refcount_cow(info, irec, agbno);
> > +		break;
> 
> This is where the agbno comes from :P
> 
> > +	}
> >  
> >  	xfs_scrub_ag_free(info->sc, &info->sc->sa);
> >  }
> > diff --git a/fs/xfs/scrub/ialloc.c b/fs/xfs/scrub/ialloc.c
> > index 30603b4..fb16314 100644
> > --- a/fs/xfs/scrub/ialloc.c
> > +++ b/fs/xfs/scrub/ialloc.c
> > @@ -97,6 +97,7 @@ xfs_scrub_iallocbt_chunk_xref(
> >  
> >  	xfs_rmap_ag_owner(&oinfo, XFS_RMAP_OWN_INODES);
> >  	xfs_scrub_xref_owned_by(sc, agbno, len, &oinfo);
> > +	xfs_scrub_xref_not_shared(sc, agbno, len);
> >  }
> >  
> >  /* Is this chunk worth checking? */
> > diff --git a/fs/xfs/scrub/inode.c b/fs/xfs/scrub/inode.c
> > index fc546f2..f12586c 100644
> > --- a/fs/xfs/scrub/inode.c
> > +++ b/fs/xfs/scrub/inode.c
> > @@ -652,6 +652,7 @@ xfs_scrub_inode_xref(
> >  	xfs_scrub_inode_xref_finobt(sc, ino);
> >  	xfs_rmap_ag_owner(&oinfo, XFS_RMAP_OWN_INODES);
> >  	xfs_scrub_xref_owned_by(sc, agbno, 1, &oinfo);
> > +	xfs_scrub_xref_not_shared(sc, agbno, 1);
> >  
> >  	xfs_scrub_ag_free(sc, &sc->sa);
> >  }
> > diff --git a/fs/xfs/scrub/refcount.c b/fs/xfs/scrub/refcount.c
> > index df18e47..6e5b12a 100644
> > --- a/fs/xfs/scrub/refcount.c
> > +++ b/fs/xfs/scrub/refcount.c
> > @@ -31,6 +31,7 @@
> >  #include "xfs_sb.h"
> >  #include "xfs_alloc.h"
> >  #include "xfs_rmap.h"
> > +#include "xfs_refcount.h"
> >  #include "scrub/xfs_scrub.h"
> >  #include "scrub/scrub.h"
> >  #include "scrub/common.h"
> > @@ -428,3 +429,67 @@ xfs_scrub_refcountbt(
> >  
> >  	return error;
> >  }
> > +
> > +/* xref check that a cow staging extent is marked in the refcountbt. */
> > +void
> > +xfs_scrub_xref_has_cow_staging(
> > +	struct xfs_scrub_context	*sc,
> > +	xfs_agblock_t			bno,
> 
> agbno
> 
> > +	xfs_extlen_t			len)
> > +{
> > +	struct xfs_refcount_irec	rc;
> > +	bool				has_cowflag;
> > +	int				has_refcount;
> > +	int				error;
> .....
> > +/*
> > + * xref check that the extent is not shared.  Only file data blocks
> > + * can have multiple owners.
> > + */
> > +void
> > +xfs_scrub_xref_not_shared(
> > +	struct xfs_scrub_context	*sc,
> > +	xfs_agblock_t			bno,
> 
> agbno
> 
> Cheers,
> 
> Dave.
> -- 
> Dave Chinner
> david@fromorbit.com
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2018-01-16  6:52 UTC|newest]

Thread overview: 94+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-23  0:42 [PATCH v11 00/21] xfs: online scrub xref support Darrick J. Wong
2017-12-23  0:42 ` [PATCH 01/21] xfs: ignore agfl read errors when not scrubbing agfl Darrick J. Wong
2018-01-05  1:12   ` Dave Chinner
2017-12-23  0:43 ` [PATCH 02/21] xfs: catch a few more error codes when scrubbing secondary sb Darrick J. Wong
2018-01-05  1:17   ` Dave Chinner
2018-01-05  1:24     ` Darrick J. Wong
2018-01-05  2:10       ` Dave Chinner
2017-12-23  0:43 ` [PATCH 03/21] xfs: xfs_scrub_bmap should use for_each_xfs_iext Darrick J. Wong
2018-01-05  1:17   ` Dave Chinner
2017-12-23  0:43 ` [PATCH 04/21] xfs: always grab transaction when scrubbing inode Darrick J. Wong
2018-01-05  1:18   ` Dave Chinner
2017-12-23  0:43 ` [PATCH 05/21] xfs: distinguish between corrupt inode and invalid inum in xfs_scrub_get_inode Darrick J. Wong
2018-01-05  1:23   ` Dave Chinner
2017-12-23  0:43 ` [PATCH 06/21] xfs: add scrub cross-referencing helpers for the free space btrees Darrick J. Wong
2018-01-05  1:29   ` Dave Chinner
2017-12-23  0:43 ` [PATCH 07/21] xfs: add scrub cross-referencing helpers for the inode btrees Darrick J. Wong
2018-01-05  1:36   ` Dave Chinner
2018-01-05  2:19     ` Darrick J. Wong
2018-01-05 21:51   ` [PATCH v2 " Darrick J. Wong
2018-01-16 23:05     ` Darrick J. Wong
2018-01-17  0:36       ` Dave Chinner
2017-12-23  0:43 ` [PATCH 08/21] xfs: add scrub cross-referencing helpers for the rmap btrees Darrick J. Wong
2018-01-05  1:40   ` Dave Chinner
2018-01-05  2:49     ` Darrick J. Wong
2018-01-05  3:38       ` Dave Chinner
2018-01-05 21:53   ` [PATCH v2 " Darrick J. Wong
2018-01-06 20:46     ` Dave Chinner
2017-12-23  0:43 ` [PATCH 09/21] xfs: add scrub cross-referencing helpers for the refcount btrees Darrick J. Wong
2018-01-05  1:41   ` Dave Chinner
2017-12-23  0:43 ` [PATCH 10/21] xfs: set up scrub cross-referencing helpers Darrick J. Wong
2018-01-05  2:08   ` Dave Chinner
2018-01-05  3:05     ` Darrick J. Wong
2018-01-05 21:54   ` [PATCH v2 " Darrick J. Wong
2018-01-16 23:06     ` Darrick J. Wong
2018-01-17  0:41     ` Dave Chinner
2017-12-23  0:44 ` [PATCH 11/21] xfs: fix a few erroneous process_error calls in the scrubbers Darrick J. Wong
2018-01-05  2:11   ` Dave Chinner
2017-12-23  0:44 ` [PATCH 12/21] xfs: check btree block ownership with bnobt/rmapbt when scrubbing btree Darrick J. Wong
2018-01-05  2:24   ` Dave Chinner
2018-01-05  2:53     ` Darrick J. Wong
2018-01-05  3:39       ` Dave Chinner
2017-12-23  0:44 ` [PATCH 13/21] xfs: introduce scrubber cross-referencing stubs Darrick J. Wong
2018-01-08 23:36   ` Dave Chinner
2018-01-08 23:59     ` Darrick J. Wong
2018-01-09 21:00   ` [PATCH v2 " Darrick J. Wong
2018-01-10  0:12     ` Dave Chinner
2017-12-23  0:44 ` [PATCH 14/21] xfs: cross-reference with the bnobt Darrick J. Wong
2018-01-08 23:51   ` Dave Chinner
2018-01-09  0:34     ` Darrick J. Wong
2018-01-09  0:57       ` Dave Chinner
2018-01-09 21:15   ` [PATCH v2 " Darrick J. Wong
2018-01-10  0:15     ` Dave Chinner
2017-12-23  0:44 ` [PATCH 15/21] xfs: cross-reference bnobt records with cntbt Darrick J. Wong
2018-01-08 23:55   ` Dave Chinner
2018-01-09  0:37     ` Darrick J. Wong
2018-01-09 21:20   ` [PATCH v2 " Darrick J. Wong
2018-01-10  0:19     ` Dave Chinner
2017-12-23  0:44 ` [PATCH 16/21] xfs: cross-reference inode btrees during scrub Darrick J. Wong
2018-01-09 21:22   ` [PATCH v2 " Darrick J. Wong
2018-01-15 22:17     ` Dave Chinner
2018-01-16  6:30       ` Darrick J. Wong
2018-01-16 23:23   ` [PATCH v3 " Darrick J. Wong
2018-01-17  0:44     ` Dave Chinner
2017-12-23  0:44 ` [PATCH 17/21] xfs: cross-reference reverse-mapping btree Darrick J. Wong
2018-01-09 21:24   ` [PATCH v2 " Darrick J. Wong
2018-01-15 23:04     ` Dave Chinner
2018-01-16  6:38       ` Darrick J. Wong
2018-01-16 23:25   ` [PATCH v3 " Darrick J. Wong
2018-01-17  0:52     ` Dave Chinner
2017-12-23  0:44 ` [PATCH 18/21] xfs: cross-reference the rmapbt data with the refcountbt Darrick J. Wong
2018-01-09 21:25   ` [PATCH v2 " Darrick J. Wong
2018-01-15 23:49     ` Dave Chinner
2018-01-16  6:49       ` Darrick J. Wong
2018-01-16 19:47         ` Darrick J. Wong
2018-01-16 23:26   ` [PATCH v3 " Darrick J. Wong
2018-01-17  1:00     ` Dave Chinner
2018-01-17  1:11       ` Darrick J. Wong
2017-12-23  0:44 ` [PATCH 19/21] xfs: cross-reference refcount btree during scrub Darrick J. Wong
2018-01-09 21:25   ` [PATCH v2 " Darrick J. Wong
2018-01-16  2:44     ` Dave Chinner
2018-01-16  6:52       ` Darrick J. Wong [this message]
2018-01-16 20:26         ` Darrick J. Wong
2018-01-16 23:27   ` [PATCH v3 " Darrick J. Wong
2018-01-17  1:02     ` Dave Chinner
2017-12-23  0:44 ` [PATCH 20/21] xfs: cross-reference the realtime bitmap Darrick J. Wong
2018-01-09 21:26   ` [PATCH v2 " Darrick J. Wong
2018-01-16  2:57     ` Dave Chinner
2018-01-16  6:55       ` Darrick J. Wong
2018-01-16 23:27   ` [PATCH v3 " Darrick J. Wong
2018-01-17  1:03     ` Dave Chinner
2017-12-23  0:45 ` [PATCH 21/21] xfs: cross-reference the block mappings when possible Darrick J. Wong
2018-01-09 21:26   ` [PATCH v2 " Darrick J. Wong
2018-01-16  2:58     ` Dave Chinner
2018-01-16  6:55       ` 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=20180116065244.GJ5602@magnolia \
    --to=darrick.wong@oracle.com \
    --cc=david@fromorbit.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.