From: Christoph Hellwig <hch@infradead.org>
To: Brian Foster <bfoster@redhat.com>
Cc: "Darrick J. Wong" <darrick.wong@oracle.com>, linux-xfs@vger.kernel.org
Subject: Re: [PATCH 00/19] xfs: refactor log recovery
Date: Mon, 27 Apr 2020 23:12:08 -0700 [thread overview]
Message-ID: <20200428061208.GA18850@infradead.org> (raw)
In-Reply-To: <20200422161854.GB37352@bfoster>
On Wed, Apr 22, 2020 at 12:18:54PM -0400, Brian Foster wrote:
> - Transaction reorder
>
> Virtualizing the transaction reorder across all several files/types
> strikes me as overkill for several reasons. From a code standpoint,
> we've created a new type enumeration and a couple fields (enum type and
> a function) in a generic structure to essentially abstract out the
> buffer handling into a function. The latter checks another couple of blf
> flags, which appears to be the only real "type specific" logic in the
> whole sequence. From a complexity standpoint, the reorder operation is a
> fairly low level and internal recovery operation. We have this huge
> comment just to explain exactly what's happening and why certain items
> have to be ordered as such, or some treated like others, etc. TBH it's
> not terribly clear even with that documentation, so I don't know that
> splitting the associated mapping logic off into separate files is
> helpful.
I actually very much like idea of moving any knowledge of the individual
item types out of xfs_log_recovery.c. In reply to the patch I've
suggsted an idea how to kill the knowledge for all but the buffer and
icreate items, which should make this a little more sensible.
I actually think we should go further in one aspect - instead of having
the item type to ops mapping in a single function in xfs_log_recovery.c
we should have a table that the items can just add themselves to.
> - Readahead
>
> We end up with readahead callouts for only the types that translate to
> buffers (so buffers, inode, dquots), and then those callouts do some
> type specific mapping (that is duplicated within the specific type
> handers) and issue a readahead (which is duplicated across each ra_pass2
> call). I wonder if this would be better abstracted by a ->bmap() like
> call that simply maps the item to a [block,length] and returns a
> non-zero length if the core recovery code should invoke readahead (after
> checking for cancellation). It looks like the underlying implementation
> of those bmap calls could be further factored into helpers that
> translate from the raw record data into the type specific format
> structures, and that could reduce duplication between the readahead
> calls and the pass2 calls in a couple cases. (The more I think about,
> the more I think we should introduce those kind of cleanups before
> getting into the need for function pointers.)
That sounds more complicated what we have right now, and even more so
with my little xlog_buf_readahead helper. Yes, the methods will all
just call xlog_buf_readahead, but they are trivial two-liners that are
easy to understand. Much easier than a complicated calling convention
to pass the blkno, len and buf ops back.
> - Recovery (pass1/pass2)
>
> The core recovery bits seem more reasonable to factor out in general.
> That said, we only have two pass1 callbacks (buffers and quotaoff). The
> buffer callback does cancellation management and the quotaoff sets some
> flags, so I wonder why those couldn't just remain as direct function
> calls (even if we move the functions out of xfs_log_recover.c). There
> are more callbacks for pass2 so the function pointers make a bit more
> sense there, but at the same time it looks like the various intents are
> further abstracted behind a single "intent type" pass2 call (which has a
> hardcoded XLOG_REORDER_INODE_LIST reorder value and is about as clear as
> mud in that context, getting to my earlier point).
Again I actually like the callouts, mostly because they make it pretty
clear what is going on. I also really like the fact that the recovery
code is close to the code actually writing the log items.
next prev parent reply other threads:[~2020-04-28 6:12 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-22 2:06 [PATCH 00/19] xfs: refactor log recovery Darrick J. Wong
2020-04-22 2:06 ` [PATCH 01/19] xfs: complain when we don't recognize the log item type Darrick J. Wong
2020-04-22 16:17 ` Brian Foster
2020-04-25 17:42 ` Christoph Hellwig
2020-04-27 17:55 ` Darrick J. Wong
2020-04-22 2:06 ` [PATCH 02/19] xfs: refactor log recovery item sorting into a generic dispatch structure Darrick J. Wong
2020-04-25 18:13 ` Christoph Hellwig
2020-04-27 22:04 ` Darrick J. Wong
2020-04-28 5:11 ` Christoph Hellwig
2020-04-28 20:46 ` Darrick J. Wong
2020-04-22 2:06 ` [PATCH 03/19] xfs: refactor log recovery item dispatch for pass2 readhead functions Darrick J. Wong
2020-04-25 18:19 ` Christoph Hellwig
2020-04-28 20:54 ` Darrick J. Wong
2020-04-29 6:07 ` Christoph Hellwig
2020-04-22 2:06 ` [PATCH 04/19] xfs: refactor log recovery item dispatch for pass1 commit functions Darrick J. Wong
2020-04-25 18:20 ` Christoph Hellwig
2020-04-22 2:06 ` [PATCH 05/19] xfs: refactor log recovery buffer item dispatch for pass2 " Darrick J. Wong
2020-04-22 2:06 ` [PATCH 06/19] xfs: refactor log recovery inode " Darrick J. Wong
2020-04-22 2:06 ` [PATCH 07/19] xfs: refactor log recovery intent " Darrick J. Wong
2020-04-25 18:24 ` Christoph Hellwig
2020-04-28 22:42 ` Darrick J. Wong
2020-04-22 2:06 ` [PATCH 08/19] xfs: refactor log recovery dquot " Darrick J. Wong
2020-04-22 2:07 ` [PATCH 09/19] xfs: refactor log recovery icreate " Darrick J. Wong
2020-04-22 2:07 ` [PATCH 10/19] xfs: refactor log recovery quotaoff " Darrick J. Wong
2020-04-22 2:07 ` [PATCH 11/19] xfs: refactor EFI log item recovery dispatch Darrick J. Wong
2020-04-25 18:28 ` Christoph Hellwig
2020-04-28 22:41 ` Darrick J. Wong
2020-04-28 23:45 ` Darrick J. Wong
2020-04-29 7:09 ` Christoph Hellwig
2020-04-29 7:18 ` Christoph Hellwig
2020-04-29 14:20 ` Darrick J. Wong
2020-04-22 2:07 ` [PATCH 12/19] xfs: refactor RUI " Darrick J. Wong
2020-04-25 18:28 ` Christoph Hellwig
2020-04-28 22:40 ` Darrick J. Wong
2020-04-22 2:07 ` [PATCH 13/19] xfs: refactor CUI " Darrick J. Wong
2020-04-22 2:07 ` [PATCH 14/19] xfs: refactor BUI " Darrick J. Wong
2020-04-22 2:07 ` [PATCH 15/19] xfs: refactor releasing finished intents during log recovery Darrick J. Wong
2020-04-25 18:34 ` Christoph Hellwig
2020-04-28 22:40 ` Darrick J. Wong
2020-04-22 2:07 ` [PATCH 16/19] xfs: refactor adding recovered intent items to the log Darrick J. Wong
2020-04-25 18:34 ` Christoph Hellwig
2020-04-22 2:07 ` [PATCH 17/19] xfs: hoist the ail unlock/lock cycle when cancelling intents during recovery Darrick J. Wong
2020-04-25 18:35 ` Christoph Hellwig
2020-04-22 2:07 ` [PATCH 18/19] xfs: remove xlog_item_is_intent Darrick J. Wong
2020-04-22 2:08 ` [PATCH 19/19] xfs: move xlog_recover_intent_pass2 up in the file Darrick J. Wong
2020-04-25 18:36 ` Christoph Hellwig
2020-04-28 22:38 ` Darrick J. Wong
2020-04-22 16:18 ` [PATCH 00/19] xfs: refactor log recovery Brian Foster
2020-04-28 6:12 ` Christoph Hellwig [this message]
2020-04-28 12:43 ` Brian Foster
2020-04-28 22:34 ` Darrick J. Wong
2020-04-29 6:09 ` Christoph Hellwig
2020-04-29 11:52 ` Brian Foster
2020-04-29 14:22 ` Darrick J. Wong
2020-04-28 6:22 ` Christoph Hellwig
2020-04-28 22:28 ` 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=20200428061208.GA18850@infradead.org \
--to=hch@infradead.org \
--cc=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 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).