Received: by 2002:a05:6a10:a841:0:0:0:0 with SMTP id d1csp338100pxy; Thu, 22 Apr 2021 03:23:24 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzEnS7FzdUcaxVEaZ3Enr1pUlgydwHfmLUUEJjvdA4QbygHdogNoYZ92ePbSAcK73BXCehr X-Received: by 2002:a05:6402:26d3:: with SMTP id x19mr2903758edd.349.1619087004112; Thu, 22 Apr 2021 03:23:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1619087004; cv=none; d=google.com; s=arc-20160816; b=jkyG+yc26YKq6pi7sX7cRZ57U6wIduCFEG527+kGMp+c6xBzkXZxxNRMQJ6hdyZOSD n3c2YtxrQ3TYa0w6oGaC4wrNLZMQOcYDyzA4tC9uJUVX7gOOPfBG1iWTT016Wg+Ry24k 6YmKH8EnT3UD9w0DlmrtU7BnmW8Ki4gbzKnCOyqGi1vGXqVcmspHzrRovhIYitQPqoxm kPPh8Ewlioy7vxXBH2XvLnOo9B/75Q5lBAxFjwq+Dgfnatzq16S8UlpuOjexYLwEPKhr Ml9mtuMWo2pmEYWj20pour9OFVfIv5H8s5bAStiyN37y44vI5oTSLcwAC/OIesh3sKd3 wz3w== 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=c5fF1DBmaD2NXCfQJuiX4u4cP4JYuOvuLumZcY9J2Vw=; b=NBDzsCjhfuX+NbNN7EvwvECZoncxAKf71Re3vm713lHTlAcPLvA072SwCd4n2ZwnrX y08RE6BMscFXfi9gXkxOyyqSfKDxrqjI07eIeyTMQKMmQss0cgGRWHOkPm0GF5cjB6eF Y+rnun7UtRJ+hN/RbA2Zuifvq3bvxyxPh+XMeXzDD3dEhviHtfGd6cl2Zkia//sssX+X tXetRKIHOwBsBcRFhleVh+AGhyjLZyR6nbP4L0BWyCe4LZm5DxKEPatRKhfwPN8tvHne /9FuGrRU9j7Xa5CDWEliMAVBITODiRClQthO+n4D4XGdIRfR78HvJhm/IzSKX1jXeJU1 Kx2Q== 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 d26si1807261ejw.231.2021.04.22.03.23.00; Thu, 22 Apr 2021 03:23:24 -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 S235735AbhDVKUZ (ORCPT + 99 others); Thu, 22 Apr 2021 06:20:25 -0400 Received: from szxga04-in.huawei.com ([45.249.212.190]:16150 "EHLO szxga04-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235513AbhDVKUY (ORCPT ); Thu, 22 Apr 2021 06:20:24 -0400 Received: from DGGEMS407-HUB.china.huawei.com (unknown [172.30.72.59]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4FQtcv0LT0zpZh0; Thu, 22 Apr 2021 18:16:47 +0800 (CST) Received: from szvp000203569.huawei.com (10.120.216.130) by DGGEMS407-HUB.china.huawei.com (10.3.19.207) with Microsoft SMTP Server id 14.3.498.0; Thu, 22 Apr 2021 18:19:38 +0800 From: Chao Yu To: CC: , , , Chao Yu Subject: [PATCH] f2fs: drop inplace IO if fs status is abnormal Date: Thu, 22 Apr 2021 18:19:25 +0800 Message-ID: <20210422101925.108345-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 If filesystem has cp_error or need_fsck status, let's drop inplace IO to avoid further corruption of fs data. Signed-off-by: Chao Yu --- fs/f2fs/segment.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c index 6e740ecf0814..3de119e5c934 100644 --- a/fs/f2fs/segment.c +++ b/fs/f2fs/segment.c @@ -3551,7 +3551,13 @@ int f2fs_inplace_write_data(struct f2fs_io_info *fio) set_sbi_flag(sbi, SBI_NEED_FSCK); f2fs_warn(sbi, "%s: incorrect segment(%u) type, run fsck to fix.", __func__, segno); - return -EFSCORRUPTED; + err = -EFSCORRUPTED; + goto drop_bio; + } + + if (is_sbi_flag_set(sbi, SBI_NEED_FSCK) || f2fs_cp_error(sbi)) { + err = -EIO; + goto drop_bio; } stat_inc_inplace_blocks(fio->sbi); @@ -3565,6 +3571,15 @@ int f2fs_inplace_write_data(struct f2fs_io_info *fio) f2fs_update_iostat(fio->sbi, fio->io_type, F2FS_BLKSIZE); } + return err; +drop_bio: + if (fio->bio) { + struct bio *bio = *(fio->bio); + + bio->bi_status = BLK_STS_IOERR; + bio_endio(bio); + fio->bio = NULL; + } return err; } -- 2.29.2