From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 73F2B2857C1 for ; Wed, 25 Feb 2026 14:33:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772029991; cv=none; b=T5zlJ+Q6ZCMhuIg+Ubn1brJo1CGSEXKdA3WXOuE6NkY2N7Il+sYlOMOdbDqAMUtKH2E8ET9NR5S9tPTsInkLcZT245jfhnRSAvFct7vSfKpfzWzLKM4ynz79kjGtbqhs8PyycYqwgNxtf4Fx7LkUqEpBaiofRanLWLbzHcufks8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772029991; c=relaxed/simple; bh=2aXCrFYspRcSeYWrZNTOtdpdN6lMraZG09Zjxc6D+6o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=j0W9xPyOTSMfzR68pLQ3MQTY8/da0FPUfFw8+71n71kwP3vIhW2ul0rG9WgxKD4l/hhvdVPUy1NAgZ+He2KjKRbkuWrXDeE8ribOCKYvkD9VEQWHl4A52belDgd69DbcYdDyHDRZ5XR0ouxPeCGma0XX3jllgpnN16cQXbbWVG8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=fLsdOyho; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="fLsdOyho" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 972BFC116D0; Wed, 25 Feb 2026 14:33:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1772029991; bh=2aXCrFYspRcSeYWrZNTOtdpdN6lMraZG09Zjxc6D+6o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fLsdOyho8G+puREopycCAW3IOGiMHsipEbmBbk6pEP7Aemg2uQWWouG5U5hbwNv/H ESYmRVJB9IRfCUeNlpMWcwQpiDPV8Rdl+rB0N4jfk/CM6izcwrLyIoYCCZ5QWD6Z7i dnCXdIgaN7FeMiwqzDEF0AvVOsARo7qM9jjs6LkspBiIOt8GgEgGPkodRKjeYNa92R 3VhH2dbOil4yfnhxEhB/4ydFMitmlbPwxNw1B9CU4OdoC+wbyHsDaSeBpHUUZU5sTP k48R45i2Ogun0bn5+R0OdHSbSnh0WcscFyZeDxj7agpmnlXJs2+KfNQRZ90mHapjiP rqthAGMtrQjfw== From: Sasha Levin To: stable@vger.kernel.org Cc: Zhang Yi , Baokun Li , stable@kernel.org, Ojaswin Mujoo , Theodore Ts'o , Sasha Levin Subject: [PATCH 5.10.y] ext4: drop extent cache when splitting extent fails Date: Wed, 25 Feb 2026 09:33:08 -0500 Message-ID: <20260225143308.469233-1-sashal@kernel.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <2026022430-craftsman-challenge-a264@gregkh> References: <2026022430-craftsman-challenge-a264@gregkh> Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Zhang Yi [ Upstream commit 79b592e8f1b435796cbc2722190368e3e8ffd7a1 ] When the split extent fails, we might leave some extents still being processed and return an error directly, which will result in stale extent entries remaining in the extent status tree. So drop all of the remaining potentially stale extents if the splitting fails. Signed-off-by: Zhang Yi Reviewed-by: Baokun Li Cc: stable@kernel.org Reviewed-by: Ojaswin Mujoo Message-ID: <20251129103247.686136-8-yi.zhang@huaweicloud.com> Signed-off-by: Theodore Ts'o [ bring error handling pattern closer to upstream ] Signed-off-by: Sasha Levin --- fs/ext4/extents.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index 12da59c03c7cf..5572d2404eb3b 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c @@ -3228,7 +3228,9 @@ 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 && err != -ENOSPC && err != -EDQUOT && err != -ENOMEM) + goto out_err; + if (!err) goto out; /* @@ -3244,7 +3246,8 @@ static int ext4_split_extent_at(handle_t *handle, if (IS_ERR(path)) { EXT4_ERROR_INODE(inode, "Failed split extent on %u, err %ld", split, PTR_ERR(path)); - return PTR_ERR(path); + err = PTR_ERR(path); + goto out_err; } depth = ext_depth(inode); ex = path[depth].p_ext; @@ -3300,6 +3303,9 @@ static int ext4_split_extent_at(handle_t *handle, */ ext4_ext_dirty(handle, inode, path + path->p_depth); return err; +out_err: + /* Remove all remaining potentially stale extents. */ + ext4_es_remove_extent(inode, ee_block, ee_len); out: ext4_ext_show_leaf(inode, *ppath); return err; -- 2.51.0