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 4/4] ext4: data=journal: write-protect pages on j_submit_inode_data_buffers()
Date: Thu, 8 Oct 2020 22:10:50 -0400 [thread overview]
Message-ID: <20201009021050.GH235506@mit.edu> (raw)
In-Reply-To: <20201006004841.600488-5-mfo@canonical.com>
On Mon, Oct 05, 2020 at 09:48:41PM -0300, Mauricio Faria de Oliveira wrote:
> This implements journal callbacks j_submit|finish_inode_data_buffers()
> with different behavior for data=journal: to write-protect pages under
> commit, preventing changes to buffers writeably mapped to userspace.
>
> If a buffer's content changes between commit's checksum calculation
> and write-out to disk, it can cause journal recovery/mount failures
> upon a kernel crash or power loss.
>
> [ 27.334874] EXT4-fs: Warning: mounting with data=journal disables delayed allocation, dioread_nolock, and O_DIRECT support!
> [ 27.339492] JBD2: Invalid checksum recovering data block 8705 in log
> [ 27.342716] JBD2: recovery failed
> [ 27.343316] EXT4-fs (loop0): error loading journal
> mount: /ext4: can't read superblock on /dev/loop0.
>
> In j_submit_inode_data_buffers() we write-protect the inode's pages
> with write_cache_pages() and redirty w/ writepage callback if needed.
>
> In j_finish_inode_data_buffers() there is nothing do to.
>
> And in order to use the callbacks, inodes are added to the inode list
> in transaction in __ext4_journalled_writepage() and ext4_page_mkwrite().
>
> In ext4_page_mkwrite() we must make sure that the buffers are attached
> to the transaction as jbddirty with write_end_fn(), as already done in
> __ext4_journalled_writepage().
>
> Signed-off-by: Mauricio Faria de Oliveira <mfo@canonical.com>
> Reported-by: Dann Frazier <dann.frazier@canonical.com>
> Reported-by: kernel test robot <lkp@intel.com> # wbc.nr_to_write
> Suggested-by: Jan Kara <jack@suse.cz>
> Reviewed-by: Jan Kara <jack@suse.cz>
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 4/4] ext4: data=journal: write-protect pages on j_submit_inode_data_buffers()
Date: Thu, 8 Oct 2020 22:10:50 -0400 [thread overview]
Message-ID: <20201009021050.GH235506@mit.edu> (raw)
In-Reply-To: <20201006004841.600488-5-mfo@canonical.com>
On Mon, Oct 05, 2020 at 09:48:41PM -0300, Mauricio Faria de Oliveira wrote:
> This implements journal callbacks j_submit|finish_inode_data_buffers()
> with different behavior for data=journal: to write-protect pages under
> commit, preventing changes to buffers writeably mapped to userspace.
>
> If a buffer's content changes between commit's checksum calculation
> and write-out to disk, it can cause journal recovery/mount failures
> upon a kernel crash or power loss.
>
> [ 27.334874] EXT4-fs: Warning: mounting with data=journal disables delayed allocation, dioread_nolock, and O_DIRECT support!
> [ 27.339492] JBD2: Invalid checksum recovering data block 8705 in log
> [ 27.342716] JBD2: recovery failed
> [ 27.343316] EXT4-fs (loop0): error loading journal
> mount: /ext4: can't read superblock on /dev/loop0.
>
> In j_submit_inode_data_buffers() we write-protect the inode's pages
> with write_cache_pages() and redirty w/ writepage callback if needed.
>
> In j_finish_inode_data_buffers() there is nothing do to.
>
> And in order to use the callbacks, inodes are added to the inode list
> in transaction in __ext4_journalled_writepage() and ext4_page_mkwrite().
>
> In ext4_page_mkwrite() we must make sure that the buffers are attached
> to the transaction as jbddirty with write_end_fn(), as already done in
> __ext4_journalled_writepage().
>
> Signed-off-by: Mauricio Faria de Oliveira <mfo@canonical.com>
> Reported-by: Dann Frazier <dann.frazier@canonical.com>
> Reported-by: kernel test robot <lkp@intel.com> # wbc.nr_to_write
> Suggested-by: Jan Kara <jack@suse.cz>
> Reviewed-by: Jan Kara <jack@suse.cz>
Thanks, applied.
- Ted
next prev parent reply other threads:[~2020-10-09 2:11 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
2020-10-09 2:10 ` [Ocfs2-devel] " 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 [this message]
2020-10-09 2:10 ` 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=20201009021050.GH235506@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.