Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp156377pxf; Wed, 31 Mar 2021 20:04:21 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzEyBzBQw0UTxKGFhfjcw4pq5gdgrRJiHVUnTruNpIz1dWaQPiCLJfoLKMFp698lnmJ7cN1 X-Received: by 2002:a17:907:3e9e:: with SMTP id hs30mr7108005ejc.66.1617246260834; Wed, 31 Mar 2021 20:04:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1617246260; cv=none; d=google.com; s=arc-20160816; b=ndxJuoopLhO2N6Lg8XwEfbk9bDop4/sluYXu1KlqiztYJtE004DxxIsAAI9KJoczeR q0XYWQm47Ib0puew+Li5oWffPxCupPTxDeg91n+QEIGUuoz3EG3LyuQqLnTItLOCstZ3 wLr7NszCGk58SAWaL/JxqWQdx18sV+SNtFzkGv2Macs2siDdaZFCxqwgWCrOPKTE0bXI kowmPjegiraUzW7K3FDTymhe6JtJaQTIXRTdASLdOBkvT+GNU0pDUCIox6zB2/QLPAaV Wrk5FI3/x7OYK058GRhivasCKFOQoAXelOndzq0/NeqsAScNLopL9lzR7YAjJlkXMt0d +gNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=Lv0ZLmQtqRDmmRSe24lLojJqozv307ZWCEk/Xxe2SRQ=; b=aUyrf9S33a1tW+pvU8mbXp5cwAtzYyASH4AfmZNzzDQL8PNQJn7bnJQgAcANk4cL85 Kx1Emk9qsSHE1XxYAzeWf1frUGhn+JbtfEY+maSWQgXASbYb/82XeeQ5Ddt5yeCG1qXB 47RbyCCog3z5qf2z4z7+MrviK8gS5afgJkPnoBmONW55QAXuXhE17xcGLoiOHcXr4z57 /140H1pIiTDC/0Zkc/mM/O2Szkw6Ut2WcJt71Mnla/ZO/JCYwoiRnQtT0GU67bvHU1Z0 PDPUsOsvN1wDw4AXltUC8W9CkN+waTjafP5fpF8B4BhJmDqw5/X4hKvAOONW/2oWTzPA co9A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=huawei.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id cy27si3165584edb.529.2021.03.31.20.03.50; Wed, 31 Mar 2021 20:04:20 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=huawei.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233129AbhDADCz (ORCPT + 99 others); Wed, 31 Mar 2021 23:02:55 -0400 Received: from szxga05-in.huawei.com ([45.249.212.191]:14983 "EHLO szxga05-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229497AbhDADCV (ORCPT ); Wed, 31 Mar 2021 23:02:21 -0400 Received: from DGGEMS408-HUB.china.huawei.com (unknown [172.30.72.60]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4F9nwn3k1WzyNpJ; Thu, 1 Apr 2021 11:00:09 +0800 (CST) Received: from szvp000203569.huawei.com (10.120.216.130) by DGGEMS408-HUB.china.huawei.com (10.3.19.208) with Microsoft SMTP Server id 14.3.498.0; Thu, 1 Apr 2021 11:02:05 +0800 From: Chao Yu To: CC: , , , Chao Yu Subject: [PATCH] f2fs: fix to avoid GC/mmap race with f2fs_truncate() Date: Thu, 1 Apr 2021 11:01:53 +0800 Message-ID: <20210401030153.39913-1-yuchao0@huawei.com> X-Mailer: git-send-email 2.29.2 MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII X-Originating-IP: [10.120.216.130] X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org It missed to hold i_gc_rwsem and i_map_sem around f2fs_truncate() in f2fs_file_write_iter() to avoid racing with background GC and mmap, fix it. Signed-off-by: Chao Yu --- fs/f2fs/file.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c index dc79694e512c..f3ca63b55843 100644 --- a/fs/f2fs/file.c +++ b/fs/f2fs/file.c @@ -4443,8 +4443,13 @@ static ssize_t f2fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from) clear_inode_flag(inode, FI_NO_PREALLOC); /* if we couldn't write data, we should deallocate blocks. */ - if (preallocated && i_size_read(inode) < target_size) + if (preallocated && i_size_read(inode) < target_size) { + down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]); + down_write(&F2FS_I(inode)->i_mmap_sem); f2fs_truncate(inode); + up_write(&F2FS_I(inode)->i_mmap_sem); + up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]); + } if (ret > 0) f2fs_update_iostat(F2FS_I_SB(inode), APP_WRITE_IO, ret); -- 2.29.2