Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 90AF3C636CD for ; Tue, 7 Feb 2023 06:46:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230325AbjBGGqM (ORCPT ); Tue, 7 Feb 2023 01:46:12 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55894 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230317AbjBGGqK (ORCPT ); Tue, 7 Feb 2023 01:46:10 -0500 Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B79D1210E for ; Mon, 6 Feb 2023 22:46:09 -0800 (PST) Received: from dggpeml500016.china.huawei.com (unknown [172.30.72.54]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4P9trK1nsDzRr57; Tue, 7 Feb 2023 14:43:45 +0800 (CST) Received: from huawei.com (10.175.127.227) by dggpeml500016.china.huawei.com (7.185.36.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.34; Tue, 7 Feb 2023 14:46:06 +0800 From: zhanchengbin To: , CC: , , , , zhanchengbin Subject: [PATCH v3 2/2] ext4: restore len when ext4_ext_insert_extent failed Date: Tue, 7 Feb 2023 15:09:31 +0800 Message-ID: <20230207070931.2189663-3-zhanchengbin1@huawei.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230207070931.2189663-1-zhanchengbin1@huawei.com> References: <20230207070931.2189663-1-zhanchengbin1@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII X-Originating-IP: [10.175.127.227] X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To dggpeml500016.china.huawei.com (7.185.36.70) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org Inside the ext4_ext_insert_extent function, every error returned will not destroy the consistency of the tree. Even if it fails after changing half of the tree, can also ensure that the tree is self-consistent, like function ext4_ext_create_new_leaf. After ext4_ext_insert_extent fails, update extent status tree depends on the incoming split_flag. So restore the len of extent to be split when ext4_ext_insert_extent return failed in ext4_split_extent_at. Signed-off-by: zhanchengbin Signed-off-by: Zhang Yi --- fs/ext4/extents.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index 3559ea6b0781..b926fef73de4 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c @@ -935,6 +935,7 @@ ext4_find_extent(struct inode *inode, ext4_lblk_t block, bh = read_extent_tree_block(inode, path[ppos].p_idx, --i, flags); if (IS_ERR(bh)) { + EXT4_ERROR_INODE(inode, "IO error reading extent block"); ret = PTR_ERR(bh); goto err; } @@ -3251,7 +3252,7 @@ static int ext4_split_extent_at(handle_t *handle, ext4_ext_mark_unwritten(ex2); err = ext4_ext_insert_extent(handle, inode, ppath, &newex, flags); - if (err != -ENOSPC && err != -EDQUOT && err != -ENOMEM) + if (!err) goto out; if (EXT4_EXT_MAY_ZEROOUT & split_flag) { -- 2.31.1