From: Yunlong Song <yunlong.song@huawei.com>
To: Chao Yu <chao@kernel.org>, <jaegeuk@kernel.org>,
<yuchao0@huawei.com>, <yunlong.song@icloud.com>
Cc: <miaoxie@huawei.com>, <bintian.wang@huawei.com>,
<shengyong1@huawei.com>, <heyunlei@huawei.com>,
<linux-f2fs-devel@lists.sourceforge.net>,
<linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 1/2] f2fs: enable to gc page whose inode already atomic commit
Date: Mon, 5 Feb 2018 10:53:13 +0800 [thread overview]
Message-ID: <f4e7b403-4945-a7f9-6bdc-214dc61c9160@huawei.com> (raw)
In-Reply-To: <a094cd40-d042-2a43-4e9a-e34c31e61d28@kernel.org>
Is it necessary to add a lock here? What's the problem of this patch (no
lock at all)? Anyway, the problem is expected to be fixed asap, since
attackers can easily write an app with only atomic start and no atomic
commit, which will cause f2fs run into loop gc if the disk layout is
much fragmented, since f2fs_gc will select the same target victim all
the time (e.g. one block of target victim belongs to the opened atomic
file, and it will not be moved and do_garbage_collect will finally
return 0, and that victim is selected again next time) and goto gc_more
time and time again, which will block all the fs ops (all the fs ops
will hang up in f2fs_balance_fs).
On 2018/2/4 22:56, Chao Yu wrote:
> On 2018/2/3 10:47, Yunlong Song wrote:
>> If inode has already started to atomic commit, then set_page_dirty will
>> not mix the gc pages with the inmem atomic pages, so the page can be
>> gced safely.
>
> Let's avoid Ccing fs mailing list if the patch didn't change vfs common
> codes.
>
> As you know, the problem here is mixed dnode block flushing w/o writebacking
> gced data block, result in making transaction unintegrated.
>
> So how about just using dio_rwsem[WRITE] during atomic committing to exclude
> GCing data block of atomic opened file?
>
> Thanks,
>
>>
>> Signed-off-by: Yunlong Song <yunlong.song@huawei.com>
>> ---
>> fs/f2fs/data.c | 5 ++---
>> fs/f2fs/gc.c | 6 ++++--
>> 2 files changed, 6 insertions(+), 5 deletions(-)
>>
>> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
>> index 7435830..edafcb6 100644
>> --- a/fs/f2fs/data.c
>> +++ b/fs/f2fs/data.c
>> @@ -1580,14 +1580,13 @@ bool should_update_outplace(struct inode *inode, struct f2fs_io_info *fio)
>> return true;
>> if (S_ISDIR(inode->i_mode))
>> return true;
>> - if (f2fs_is_atomic_file(inode))
>> - return true;
>> if (fio) {
>> if (is_cold_data(fio->page))
>> return true;
>> if (IS_ATOMIC_WRITTEN_PAGE(fio->page))
>> return true;
>> - }
>> + } else if (f2fs_is_atomic_file(inode))
>> + return true;
>> return false;
>> }
>>
>> diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
>> index b9d93fd..84ab3ff 100644
>> --- a/fs/f2fs/gc.c
>> +++ b/fs/f2fs/gc.c
>> @@ -622,7 +622,8 @@ static void move_data_block(struct inode *inode, block_t bidx,
>> if (!check_valid_map(F2FS_I_SB(inode), segno, off))
>> goto out;
>>
>> - if (f2fs_is_atomic_file(inode))
>> + if (f2fs_is_atomic_file(inode) &&
>> + !f2fs_is_commit_atomic_write(inode))
>> goto out;
>>
>> if (f2fs_is_pinned_file(inode)) {
>> @@ -729,7 +730,8 @@ static void move_data_page(struct inode *inode, block_t bidx, int gc_type,
>> if (!check_valid_map(F2FS_I_SB(inode), segno, off))
>> goto out;
>>
>> - if (f2fs_is_atomic_file(inode))
>> + if (f2fs_is_atomic_file(inode) &&
>> + !f2fs_is_commit_atomic_write(inode))
>> goto out;
>> if (f2fs_is_pinned_file(inode)) {
>> if (gc_type == FG_GC)
>>
>
> .
>
--
Thanks,
Yunlong Song
next prev parent reply other threads:[~2018-02-05 2:54 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-03 2:47 Yunlong Song
2018-02-03 2:47 ` [PATCH 2/2] f2fs: add GC_WRITTEN_PAGE to gc atomic file Yunlong Song
2018-02-04 14:56 ` [PATCH 1/2] f2fs: enable to gc page whose inode already atomic commit Chao Yu
2018-02-05 2:53 ` Yunlong Song [this message]
2018-02-05 6:29 ` Chao Yu
2018-02-05 6:40 ` Yunlong Song
2018-02-05 7:30 ` Chao Yu
2018-02-05 9:37 ` Yunlong Song
2018-02-05 11:10 ` Chao Yu
2018-02-06 2:15 ` Yunlong Song
2018-02-06 3:49 ` [PATCH] f2fs: add fi->commit_lock to protect commit GCed pages Yunlong Song
2018-02-07 12:16 ` Chao Yu
2018-02-08 3:11 ` Yunlong Song
2018-02-09 12:44 ` Chao Yu
2018-02-09 12:56 ` Yunlong Song
2018-02-09 13:26 ` Chao Yu
2018-02-09 13:29 ` Yunlong Song
2018-02-09 13:38 ` [f2fs-dev] " Chao Yu
2018-02-09 13:57 ` Yunlong Song
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=f4e7b403-4945-a7f9-6bdc-214dc61c9160@huawei.com \
--to=yunlong.song@huawei.com \
--cc=bintian.wang@huawei.com \
--cc=chao@kernel.org \
--cc=heyunlei@huawei.com \
--cc=jaegeuk@kernel.org \
--cc=linux-f2fs-devel@lists.sourceforge.net \
--cc=linux-kernel@vger.kernel.org \
--cc=miaoxie@huawei.com \
--cc=shengyong1@huawei.com \
--cc=yuchao0@huawei.com \
--cc=yunlong.song@icloud.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®