From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: Dave Chinner <david@fromorbit.com>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH 11/21] xfs: repair superblocks
Date: Mon, 9 Apr 2018 10:36:36 -0700 [thread overview]
Message-ID: <20180409173636.GQ7500@magnolia> (raw)
In-Reply-To: <20180409002651.GT23861@dastard>
On Mon, Apr 09, 2018 at 10:26:52AM +1000, Dave Chinner wrote:
> On Sat, Apr 07, 2018 at 11:04:48AM -0700, Darrick J. Wong wrote:
> > On Fri, Apr 06, 2018 at 11:05:20AM +1000, Dave Chinner wrote:
> > > On Mon, Apr 02, 2018 at 12:57:24PM -0700, Darrick J. Wong wrote:
> > > > From: Darrick J. Wong <darrick.wong@oracle.com>
> > > >
> > > > If one of the backup superblocks is found to differ seriously from
> > > > superblock 0, write out a fresh copy from the in-core sb.
> > > >
> > > > Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> > > .....
> > > > +/* Repair the superblock. */
> > > > +int
> > > > +xfs_repair_superblock(
> > > > + struct xfs_scrub_context *sc)
> > > > +{
> > > > + struct xfs_mount *mp = sc->mp;
> > > > + struct xfs_buf *bp;
> > > > + struct xfs_dsb *sbp;
> > > > + xfs_agnumber_t agno;
> > > > + int error;
> > > > +
> > > > + /* Don't try to repair AG 0's sb; let xfs_repair deal with it. */
> > > > + agno = sc->sm->sm_agno;
> > > > + if (agno == 0)
> > > > + return -EOPNOTSUPP;
> > > > +
> > > > + error = xfs_trans_read_buf(mp, sc->tp, mp->m_ddev_targp,
> > > > + XFS_AG_DADDR(mp, agno, XFS_SB_BLOCK(mp)),
> > > > + XFS_FSS_TO_BB(mp, 1), 0, &bp, NULL);
> > >
> > > If we are just overwriting the superblock, then use
> > > xfs_trans_get_buf() so we don't need to do IO here.
> >
> > Ok.
> >
> > > > + if (error)
> > > > + return error;
> > > > + bp->b_ops = &xfs_sb_buf_ops;
> > > > +
> > > > + /* Copy AG 0's superblock to this one. */
> > > > + sbp = XFS_BUF_TO_SBP(bp);
> > > > + memset(sbp, 0, mp->m_sb.sb_sectsize);
> > >
> > > That's a bit nasty. struct xfs_dsb is not a sector size in length.
> > >
> > > xfs_buf_zero(bp, 0, BBTOB(bp->b_length));
> >
> > Fixed.
> >
> > > > + xfs_sb_to_disk(sbp, &mp->m_sb);
> > > > + sbp->sb_bad_features2 = sbp->sb_features2;
> > >
> > > Why is sb_bad_features2 not correct when taken from the incore
> > > superblock?
> >
> > It is correct, this is unnecessary.
> >
> > > > + /* Write this to disk. */
> > > > + xfs_trans_buf_set_type(sc->tp, bp, XFS_BLFT_SB_BUF);
> > > > + xfs_trans_log_buf(sc->tp, bp, 0, mp->m_sb.sb_sectsize - 1);
> > >
> > > And why log this rather than just write it straight to disk? We've
> > > never logged secondary superblocks before, so why now?
> >
> > Ok, will do. I might as well change the sb scrubber to use uncached
> > buffers while I'm at it (separate patch, obviously).
>
> We discussed this with my growfs rework that used uncached buffers -
> if there's a concurrent growfs then the secondary superblock buffers
> need to be coherent and access correctly serialised. Hence they need to
> remain cached buffers. What we need to do is make them single use
> cached buffers, so they are discarded immediately the last reference
> goes away and are not put on the lru....
Ah, ok, I'd forgotten that bit of context. Hm, this is tricky in terms
of timing because the current growfs still uses uncached buffers for the
superblock, whereas the 'growfs tablise' series was going to use cached
buffers but (presumably) with xfs_buf_set_ref(bp, 0) to ensure they
don't hang around on the lru.
I think I'd prefer the scrub/repair code to be consistent with the only
other user of secondary superblocks (i.e. growfs). For now that means
using uncached buffers, though I'd convert my patches if we decide to
land your growfs series before online repair.
--D
> 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
next prev parent reply other threads:[~2018-04-09 17:36 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-02 19:56 [PATCH v14.1 00/21] xfs: online repair support Darrick J. Wong
2018-04-02 19:56 ` [PATCH 01/21] xfs: add helpers to calculate btree size Darrick J. Wong
2018-04-02 19:56 ` [PATCH 02/21] xfs: expose various functions to repair code Darrick J. Wong
2018-04-02 19:56 ` [PATCH 03/21] xfs: add repair helpers for the reverse mapping btree Darrick J. Wong
2018-04-05 23:02 ` Dave Chinner
2018-04-06 16:31 ` Darrick J. Wong
2018-04-02 19:56 ` [PATCH 04/21] xfs: add repair helpers for the reference count btree Darrick J. Wong
2018-04-02 19:56 ` [PATCH 05/21] xfs: add BMAPI_NORMAP flag to perform block remapping without updating rmapbt Darrick J. Wong
2018-04-05 23:07 ` Dave Chinner
2018-04-06 16:41 ` Darrick J. Wong
2018-04-02 19:56 ` [PATCH 06/21] xfs: make xfs_bmapi_remapi work with attribute forks Darrick J. Wong
2018-04-05 23:12 ` Dave Chinner
2018-04-06 17:31 ` Darrick J. Wong
2018-04-02 19:56 ` [PATCH 07/21] xfs: halt auto-reclamation activities while rebuilding rmap Darrick J. Wong
2018-04-05 23:14 ` Dave Chinner
2018-04-02 19:57 ` [PATCH 08/21] xfs: create tracepoints for online repair Darrick J. Wong
2018-04-05 23:15 ` Dave Chinner
2018-04-02 19:57 ` [PATCH 09/21] xfs: implement the metadata repair ioctl flag Darrick J. Wong
2018-04-05 23:24 ` Dave Chinner
2018-04-02 19:57 ` [PATCH 10/21] xfs: add helper routines for the repair code Darrick J. Wong
2018-04-06 0:52 ` Dave Chinner
2018-04-07 17:55 ` Darrick J. Wong
2018-04-09 0:23 ` Dave Chinner
2018-04-09 17:19 ` Darrick J. Wong
2018-04-02 19:57 ` [PATCH 11/21] xfs: repair superblocks Darrick J. Wong
2018-04-06 1:05 ` Dave Chinner
2018-04-07 18:04 ` Darrick J. Wong
2018-04-09 0:26 ` Dave Chinner
2018-04-09 17:36 ` Darrick J. Wong [this message]
2018-04-02 19:57 ` [PATCH 12/21] xfs: repair the AGF and AGFL Darrick J. Wong
2018-04-02 19:57 ` [PATCH 13/21] xfs: repair the AGI Darrick J. Wong
2018-04-02 19:57 ` [PATCH 14/21] xfs: repair free space btrees Darrick J. Wong
2018-04-02 19:57 ` [PATCH 15/21] xfs: repair inode btrees Darrick J. Wong
2018-04-02 19:57 ` [PATCH 16/21] xfs: repair the rmapbt Darrick J. Wong
2018-04-02 19:58 ` [PATCH 17/21] xfs: repair refcount btrees Darrick J. Wong
2018-04-02 19:58 ` [PATCH 18/21] xfs: repair inode records Darrick J. Wong
2018-04-02 19:58 ` [PATCH 19/21] xfs: zap broken inode forks Darrick J. Wong
2018-04-02 19:58 ` [PATCH 20/21] xfs: repair inode block maps Darrick J. Wong
2018-04-02 19:58 ` [PATCH 21/21] xfs: repair damaged symlinks 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=20180409173636.GQ7500@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).