From: Jaegeuk Kim <jaegeuk@kernel.org>
To: Chao Yu <yuchao0@huawei.com>
Cc: linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net
Subject: Re: [f2fs-dev] [PATCH] f2fs: allow writeback on error status filesystem
Date: Sun, 7 Jun 2020 14:17:48 -0700 [thread overview]
Message-ID: <20200607211748.GA26785@google.com> (raw)
In-Reply-To: <20200605085453.45717-1-yuchao0@huawei.com>
On 06/05, Chao Yu wrote:
> 71.07% 0.01% kworker/u256:1+ [kernel.kallsyms] [k] wb_writeback
> |
> --71.06%--wb_writeback
> |
> |--68.96%--__writeback_inodes_wb
> | |
> | --68.95%--writeback_sb_inodes
> | |
> | |--65.08%--__writeback_single_inode
> | | |
> | | --64.35%--do_writepages
> | | |
> | | |--59.83%--f2fs_write_node_pages
> | | | |
> | | | --59.74%--f2fs_sync_node_pages
> | | | |
> | | | |--27.91%--pagevec_lookup_range_tag
> | | | | |
> | | | | --27.90%--find_get_pages_range_tag
>
> If filesystem was injected w/ checkpoint errror, before umount, kworker
> will always hold one core in order to writeback a large number of node
> pages, that looks not reasonable, to avoid that, we can allow data/node
> write in such case, since we can force all data/node writes with OPU mode,
> and clear recovery flag on node, and checkpoint is not allowed as well,
> so we don't need to worry about writeback's effect on data/node in
> previous checkpoint, then with this way, it can decrease memory footprint
> cost by node/data pages and avoid looping into data/node writeback
> process.
This patch breaks fault injection test with filesystem corruption. Please check.
>
> Signed-off-by: Chao Yu <yuchao0@huawei.com>
> ---
> fs/f2fs/data.c | 19 ++++++++++++-------
> fs/f2fs/node.c | 7 +++++--
> 2 files changed, 17 insertions(+), 9 deletions(-)
>
> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
> index 9d40db50cd65..2b3c846181bb 100644
> --- a/fs/f2fs/data.c
> +++ b/fs/f2fs/data.c
> @@ -2519,6 +2519,8 @@ bool f2fs_should_update_outplace(struct inode *inode, struct f2fs_io_info *fio)
> {
> struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
>
> + if (unlikely(f2fs_cp_error(sbi)))
> + return true;
> if (f2fs_lfs_mode(sbi))
> return true;
> if (S_ISDIR(inode->i_mode))
> @@ -2702,13 +2704,16 @@ int f2fs_write_single_data_page(struct page *page, int *submitted,
> /* we should bypass data pages to proceed the kworkder jobs */
> if (unlikely(f2fs_cp_error(sbi))) {
> mapping_set_error(page->mapping, -EIO);
> - /*
> - * don't drop any dirty dentry pages for keeping lastest
> - * directory structure.
> - */
> - if (S_ISDIR(inode->i_mode))
> - goto redirty_out;
> - goto out;
> +
> + if (has_not_enough_free_secs(sbi, 0, 0)) {
> + /*
> + * don't drop any dirty dentry pages for keeping lastest
> + * directory structure.
> + */
> + if (S_ISDIR(inode->i_mode))
> + goto redirty_out;
> + goto out;
> + }
> }
>
> if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
> diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
> index 03e24df1c84f..372c04efad38 100644
> --- a/fs/f2fs/node.c
> +++ b/fs/f2fs/node.c
> @@ -1527,7 +1527,10 @@ static int __write_node_page(struct page *page, bool atomic, bool *submitted,
> unlock_page(page);
> return 0;
> }
> - goto redirty_out;
> + if (has_not_enough_free_secs(sbi, 0, 0))
> + goto redirty_out;
> + set_fsync_mark(page, 0);
> + set_dentry_mark(page, 0);
> }
>
> if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
> @@ -1568,7 +1571,7 @@ static int __write_node_page(struct page *page, bool atomic, bool *submitted,
> goto redirty_out;
> }
>
> - if (atomic && !test_opt(sbi, NOBARRIER))
> + if (atomic && !test_opt(sbi, NOBARRIER) && !f2fs_cp_error(sbi))
> fio.op_flags |= REQ_PREFLUSH | REQ_FUA;
>
> /* should add to global list before clearing PAGECACHE status */
> --
> 2.18.0.rc1
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
WARNING: multiple messages have this Message-ID (diff)
From: Jaegeuk Kim <jaegeuk@kernel.org>
To: Chao Yu <yuchao0@huawei.com>
Cc: linux-f2fs-devel@lists.sourceforge.net,
linux-kernel@vger.kernel.org, chao@kernel.org
Subject: Re: [PATCH] f2fs: allow writeback on error status filesystem
Date: Sun, 7 Jun 2020 14:17:48 -0700 [thread overview]
Message-ID: <20200607211748.GA26785@google.com> (raw)
In-Reply-To: <20200605085453.45717-1-yuchao0@huawei.com>
On 06/05, Chao Yu wrote:
> 71.07% 0.01% kworker/u256:1+ [kernel.kallsyms] [k] wb_writeback
> |
> --71.06%--wb_writeback
> |
> |--68.96%--__writeback_inodes_wb
> | |
> | --68.95%--writeback_sb_inodes
> | |
> | |--65.08%--__writeback_single_inode
> | | |
> | | --64.35%--do_writepages
> | | |
> | | |--59.83%--f2fs_write_node_pages
> | | | |
> | | | --59.74%--f2fs_sync_node_pages
> | | | |
> | | | |--27.91%--pagevec_lookup_range_tag
> | | | | |
> | | | | --27.90%--find_get_pages_range_tag
>
> If filesystem was injected w/ checkpoint errror, before umount, kworker
> will always hold one core in order to writeback a large number of node
> pages, that looks not reasonable, to avoid that, we can allow data/node
> write in such case, since we can force all data/node writes with OPU mode,
> and clear recovery flag on node, and checkpoint is not allowed as well,
> so we don't need to worry about writeback's effect on data/node in
> previous checkpoint, then with this way, it can decrease memory footprint
> cost by node/data pages and avoid looping into data/node writeback
> process.
This patch breaks fault injection test with filesystem corruption. Please check.
>
> Signed-off-by: Chao Yu <yuchao0@huawei.com>
> ---
> fs/f2fs/data.c | 19 ++++++++++++-------
> fs/f2fs/node.c | 7 +++++--
> 2 files changed, 17 insertions(+), 9 deletions(-)
>
> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
> index 9d40db50cd65..2b3c846181bb 100644
> --- a/fs/f2fs/data.c
> +++ b/fs/f2fs/data.c
> @@ -2519,6 +2519,8 @@ bool f2fs_should_update_outplace(struct inode *inode, struct f2fs_io_info *fio)
> {
> struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
>
> + if (unlikely(f2fs_cp_error(sbi)))
> + return true;
> if (f2fs_lfs_mode(sbi))
> return true;
> if (S_ISDIR(inode->i_mode))
> @@ -2702,13 +2704,16 @@ int f2fs_write_single_data_page(struct page *page, int *submitted,
> /* we should bypass data pages to proceed the kworkder jobs */
> if (unlikely(f2fs_cp_error(sbi))) {
> mapping_set_error(page->mapping, -EIO);
> - /*
> - * don't drop any dirty dentry pages for keeping lastest
> - * directory structure.
> - */
> - if (S_ISDIR(inode->i_mode))
> - goto redirty_out;
> - goto out;
> +
> + if (has_not_enough_free_secs(sbi, 0, 0)) {
> + /*
> + * don't drop any dirty dentry pages for keeping lastest
> + * directory structure.
> + */
> + if (S_ISDIR(inode->i_mode))
> + goto redirty_out;
> + goto out;
> + }
> }
>
> if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
> diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
> index 03e24df1c84f..372c04efad38 100644
> --- a/fs/f2fs/node.c
> +++ b/fs/f2fs/node.c
> @@ -1527,7 +1527,10 @@ static int __write_node_page(struct page *page, bool atomic, bool *submitted,
> unlock_page(page);
> return 0;
> }
> - goto redirty_out;
> + if (has_not_enough_free_secs(sbi, 0, 0))
> + goto redirty_out;
> + set_fsync_mark(page, 0);
> + set_dentry_mark(page, 0);
> }
>
> if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
> @@ -1568,7 +1571,7 @@ static int __write_node_page(struct page *page, bool atomic, bool *submitted,
> goto redirty_out;
> }
>
> - if (atomic && !test_opt(sbi, NOBARRIER))
> + if (atomic && !test_opt(sbi, NOBARRIER) && !f2fs_cp_error(sbi))
> fio.op_flags |= REQ_PREFLUSH | REQ_FUA;
>
> /* should add to global list before clearing PAGECACHE status */
> --
> 2.18.0.rc1
next prev parent reply other threads:[~2020-06-07 21:18 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-05 8:54 [f2fs-dev] [PATCH] f2fs: allow writeback on error status filesystem Chao Yu
2020-06-05 8:54 ` Chao Yu
2020-06-07 21:17 ` Jaegeuk Kim [this message]
2020-06-07 21:17 ` Jaegeuk Kim
2020-06-08 2:58 ` [f2fs-dev] " Chao Yu
2020-06-08 2:58 ` Chao Yu
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=20200607211748.GA26785@google.com \
--to=jaegeuk@kernel.org \
--cc=linux-f2fs-devel@lists.sourceforge.net \
--cc=linux-kernel@vger.kernel.org \
--cc=yuchao0@huawei.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.