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 C2C253AEF34 for ; Wed, 25 Feb 2026 13:46:59 +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=1772027219; cv=none; b=IeSIE0Ve81mpJBNlrRgQhwSYm5AlZmVb7o+OUdv43suKr4pp/c2DzfcgZXuQGN0YJYXpQkPe2s1efcP0gg9T1HnXNkD0a20NKfr6V1JdJV+WyixA21ljV2cRWHgYOW1tp5BPTObBNQv/32bsBD8TqGMO98ODAkzEpYxTPFr5xno= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772027219; c=relaxed/simple; bh=Qj5apVDtw0K3bVWdedzOk8xY5qcNUSkKm8wAKY4Fezc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XQ/NTfznUAalIhrguuLFKOXNi76GbGcgDfeW8OlRlFk7+WntFDSo7Lahy2w+pDLoBvyJefh/1K2/36sm+2YgEYhf0iRvjeRBH0ITT36GGkS2Q/WZNWpKc55zdiJ1u5eqvXNNWF8ZZ7YTvCtQi7ME6OrbnSpt6ctHFh499dj2kNE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=aID5Th/L; 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="aID5Th/L" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C76A5C116D0; Wed, 25 Feb 2026 13:46:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1772027219; bh=Qj5apVDtw0K3bVWdedzOk8xY5qcNUSkKm8wAKY4Fezc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aID5Th/LAsrRB4G58AnkV8FEc11Cvvb5OLuNK5m0RmC3cKvgVH3Yz6/C8wrmjtSsu rfN8LD8moCOKiiT/iCjZVlZMhEZdWg01PuwZ8b/QIz08yXNpsv5qrjomsfMO6iEThq W3tHyqlxSK2NpE7GpN805ABDXTXkfIHMjp1Q0mvF26Hfchn8i0lTYIfh7nU/uCYW2P FxOrkuT4OJpdPlHKPTTIT7cwQwDpX+WLrbb3EZplxJhHO14TTi0oQm2kZY6cUwUNbC giKHHZeMqAkVdUUeJDFLPLwX2+4j72zNlcUWlimpH1UohQNTPLbGfc/gT/s6i+ltcW EBidPF/2gwTyw== 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.15.y] ext4: drop extent cache when splitting extent fails Date: Wed, 25 Feb 2026 08:46:56 -0500 Message-ID: <20260225134656.309822-1-sashal@kernel.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <2026022429-decline-tucking-14ad@gregkh> References: <2026022429-decline-tucking-14ad@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 35bc58a26f7f4..4da75cd7fcfda 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c @@ -3233,7 +3233,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; /* @@ -3249,7 +3251,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; @@ -3305,6 +3308,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