From: "Theodore Y. Ts'o" <tytso@mit.edu>
To: Mauricio Faria de Oliveira <mfo@canonical.com>
Cc: linux-ext4@vger.kernel.org, ocfs2-devel@oss.oracle.com,
Jan Kara <jack@suse.cz>, Andreas Dilger <adilger@dilger.ca>,
dann frazier <dann.frazier@canonical.com>,
Joseph Qi <joseph.qi@linux.alibaba.com>
Subject: Re: [PATCH v5 3/4] ext4: data=journal: fixes for ext4_page_mkwrite()
Date: Thu, 8 Oct 2020 22:10:11 -0400 [thread overview]
Message-ID: <20201009021011.GG235506@mit.edu> (raw)
In-Reply-To: <20201006004841.600488-4-mfo@canonical.com>
On Mon, Oct 05, 2020 at 09:48:40PM -0300, Mauricio Faria de Oliveira wrote:
> These are two fixes for data journalling required by
> the next patch, discovered while testing it.
>
> First, the optimization to return early if all buffers
> are mapped is not appropriate for the next patch:
>
> The inode _must_ be added to the transaction's list in
> data=journal mode (so to write-protect pages on commit)
> thus we cannot return early there.
>
> Second, once that optimization to reduce transactions
> was disabled for data=journal mode, more transactions
> happened, and occasionally hit this warning message:
> 'JBD2: Spotted dirty metadata buffer'.
>
> Reason is, block_page_mkwrite() will set_buffer_dirty()
> before do_journal_get_write_access() that is there to
> prevent it. This issue was masked by the optimization.
>
> So, on data=journal use __block_write_begin() instead.
> This also requires page locking and len recalculation.
> (see block_page_mkwrite() for implementation details.)
>
> Finally, as Jan noted there is little sharing between
> data=journal and other modes in ext4_page_mkwrite().
>
> However, a prototype of ext4_journalled_page_mkwrite()
> showed there still would be lots of duplicated lines
> (tens of) that didn't seem worth it.
>
> Thus this patch ends up with an ugly goto to skip all
> non-data journalling code (to avoid long indentations,
> but that can be changed..) in the beginning, and just
> a conditional in the transaction section.
>
> Well, we skip a common part to data journalling which
> is the page truncated check, but we do it again after
> ext4_journal_start() when we re-acquire the page lock
> (so not to acquire the page lock twice needlessly for
> data journalling.)
>
> Signed-off-by: Mauricio Faria de Oliveira <mfo@canonical.com>
> Suggested-by: Jan Kara <jack@suse.cz>
> Reviewed-by: Jan Kara <jack@suse.cz>
> Reviewed-by: Andreas Dilger <adilger@dilger.ca>
Thanks, applied.
- Ted
WARNING: multiple messages have this Message-ID (diff)
From: Theodore Y. Ts'o <tytso@mit.edu>
To: Mauricio Faria de Oliveira <mfo@canonical.com>
Cc: linux-ext4@vger.kernel.org, ocfs2-devel@oss.oracle.com,
Jan Kara <jack@suse.cz>, Andreas Dilger <adilger@dilger.ca>,
dann frazier <dann.frazier@canonical.com>,
Joseph Qi <joseph.qi@linux.alibaba.com>
Subject: [Ocfs2-devel] [PATCH v5 3/4] ext4: data=journal: fixes for ext4_page_mkwrite()
Date: Thu, 8 Oct 2020 22:10:11 -0400 [thread overview]
Message-ID: <20201009021011.GG235506@mit.edu> (raw)
In-Reply-To: <20201006004841.600488-4-mfo@canonical.com>
On Mon, Oct 05, 2020 at 09:48:40PM -0300, Mauricio Faria de Oliveira wrote:
> These are two fixes for data journalling required by
> the next patch, discovered while testing it.
>
> First, the optimization to return early if all buffers
> are mapped is not appropriate for the next patch:
>
> The inode _must_ be added to the transaction's list in
> data=journal mode (so to write-protect pages on commit)
> thus we cannot return early there.
>
> Second, once that optimization to reduce transactions
> was disabled for data=journal mode, more transactions
> happened, and occasionally hit this warning message:
> 'JBD2: Spotted dirty metadata buffer'.
>
> Reason is, block_page_mkwrite() will set_buffer_dirty()
> before do_journal_get_write_access() that is there to
> prevent it. This issue was masked by the optimization.
>
> So, on data=journal use __block_write_begin() instead.
> This also requires page locking and len recalculation.
> (see block_page_mkwrite() for implementation details.)
>
> Finally, as Jan noted there is little sharing between
> data=journal and other modes in ext4_page_mkwrite().
>
> However, a prototype of ext4_journalled_page_mkwrite()
> showed there still would be lots of duplicated lines
> (tens of) that didn't seem worth it.
>
> Thus this patch ends up with an ugly goto to skip all
> non-data journalling code (to avoid long indentations,
> but that can be changed..) in the beginning, and just
> a conditional in the transaction section.
>
> Well, we skip a common part to data journalling which
> is the page truncated check, but we do it again after
> ext4_journal_start() when we re-acquire the page lock
> (so not to acquire the page lock twice needlessly for
> data journalling.)
>
> Signed-off-by: Mauricio Faria de Oliveira <mfo@canonical.com>
> Suggested-by: Jan Kara <jack@suse.cz>
> Reviewed-by: Jan Kara <jack@suse.cz>
> Reviewed-by: Andreas Dilger <adilger@dilger.ca>
Thanks, applied.
- Ted
next prev parent reply other threads:[~2020-10-09 2:10 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-06 0:48 [PATCH v5 0/4] ext4/jbd2: data=journal: write-protect pages on transaction commit Mauricio Faria de Oliveira
2020-10-06 0:48 ` [Ocfs2-devel] " Mauricio Faria de Oliveira
2020-10-06 0:48 ` [PATCH v5 1/4] jbd2: introduce/export functions jbd2_journal_submit|finish_inode_data_buffers() Mauricio Faria de Oliveira
2020-10-06 0:48 ` [Ocfs2-devel] " Mauricio Faria de Oliveira
2020-10-09 2:05 ` Theodore Y. Ts'o
2020-10-09 2:05 ` [Ocfs2-devel] " Theodore Y. Ts'o
2020-10-06 0:48 ` [PATCH v5 2/4] jbd2, ext4, ocfs2: introduce/use journal callbacks j_submit|finish_inode_data_buffers() Mauricio Faria de Oliveira
2020-10-06 0:48 ` [Ocfs2-devel] " Mauricio Faria de Oliveira
2020-10-09 2:08 ` Theodore Y. Ts'o
2020-10-09 2:08 ` [Ocfs2-devel] " Theodore Y. Ts'o
2020-10-06 0:48 ` [PATCH v5 3/4] ext4: data=journal: fixes for ext4_page_mkwrite() Mauricio Faria de Oliveira
2020-10-06 0:48 ` [Ocfs2-devel] " Mauricio Faria de Oliveira
2020-10-09 2:10 ` Theodore Y. Ts'o [this message]
2020-10-09 2:10 ` Theodore Y. Ts'o
2020-10-06 0:48 ` [PATCH v5 4/4] ext4: data=journal: write-protect pages on j_submit_inode_data_buffers() Mauricio Faria de Oliveira
2020-10-06 0:48 ` [Ocfs2-devel] " Mauricio Faria de Oliveira
2020-10-09 2:10 ` Theodore Y. Ts'o
2020-10-09 2:10 ` [Ocfs2-devel] " Theodore Y. Ts'o
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=20201009021011.GG235506@mit.edu \
--to=tytso@mit.edu \
--cc=adilger@dilger.ca \
--cc=dann.frazier@canonical.com \
--cc=jack@suse.cz \
--cc=joseph.qi@linux.alibaba.com \
--cc=linux-ext4@vger.kernel.org \
--cc=mfo@canonical.com \
--cc=ocfs2-devel@oss.oracle.com \
/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.