Received: by 10.223.176.5 with SMTP id f5csp2038614wra; Sun, 4 Feb 2018 18:58:27 -0800 (PST) X-Google-Smtp-Source: AH8x227bEmvf5n8Spj9C+/X0WE8cemLi/utSmpy6q+06DBHy14RhO7i/dDOwdyZJd7QmDWE8FuOu X-Received: by 2002:a17:902:5a4a:: with SMTP id f10-v6mr1872132plm.308.1517799507413; Sun, 04 Feb 2018 18:58:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1517799507; cv=none; d=google.com; s=arc-20160816; b=eAzXFmE0DhtJXcsVUBluBmSOcI5uClJDIyanN9LRkwlUal+1zHBu8prjl8f9ksuKmV 7mCdS4mYLJ5ThuD3gFaIb4mrlUpYYnywBZfri/P99mK0ZeGuFTmjv4mHcOLBZFY/QwqO JGhiEkuRo8YlRHnbaP9ebbzPtth2wLFcD+YQgpoqGi0I4fNS8yfhwXeVPIJeD44KDW5p 5um8ETs/Pvo6jENtOcxZxAAhOW0HVucZORN3KmvInNGl0UVXu5Jm3MoCf0DENyg50PMx 4ZTpesbA3F7ZilDa6UCAqy2W8/+2B2RPzly/SCUEvD13/PGRPEsQSkLJOh46bv8o1L4N dp3A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:arc-authentication-results; bh=NVg08GUy7OseqqE8wM70fQtp8USOx/KDld26seVeX+E=; b=zIKG37+ncS4ZXtgM4iLYB3BCvV0R8GbrdbWXskNNkD2JKnJ7U+cOsP9WHJNN+6BTZC Cm72y2p/X9hmZm6XJYlLdUSz5G4XaAgOjp6yp4HhdDXgbfRl2LMI1Rm/ZBGYZhX4meWz nUSvmt0Mb9/pOynrNWl6jIqA7Jlfh2r+BZchuzKJdNeQDWAnE+z7yMJ9a5zMdX5eZRCO 6O4I7xWBG+ewAw0hMjne6JLsceLzMPRn68iiqhhIfH37IY8pcQeHTjrAn1tLPtfiImlz 4VmkZ1l9X3zC7EDxHjyJuVw2criLsnKzEBU9NQ8uCeYMhizsp457PgfEOqOB3XqHZXFT V7+w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b75si5098181pfk.409.2018.02.04.18.57.39; Sun, 04 Feb 2018 18:58:27 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752177AbeBECyd (ORCPT + 99 others); Sun, 4 Feb 2018 21:54:33 -0500 Received: from szxga05-in.huawei.com ([45.249.212.191]:4762 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751724AbeBECy1 (ORCPT ); Sun, 4 Feb 2018 21:54:27 -0500 Received: from DGGEMS402-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id 5E854D61A936E; Mon, 5 Feb 2018 10:54:13 +0800 (CST) Received: from [127.0.0.1] (10.111.220.140) by DGGEMS402-HUB.china.huawei.com (10.3.19.202) with Microsoft SMTP Server id 14.3.361.1; Mon, 5 Feb 2018 10:54:05 +0800 Subject: Re: [PATCH 1/2] f2fs: enable to gc page whose inode already atomic commit To: Chao Yu , , , CC: , , , , , References: <1517626068-49739-1-git-send-email-yunlong.song@huawei.com> From: Yunlong Song Message-ID: Date: Mon, 5 Feb 2018 10:53:13 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8"; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [10.111.220.140] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.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 >> --- >> 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