From: Zhang Yi <yi.zhang@huaweicloud.com>
To: linux-ext4@vger.kernel.org
Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.cz,
ojaswin@linux.ibm.com, yi.zhang@huawei.com,
yi.zhang@huaweicloud.com, yizhang089@gmail.com,
libaokun1@huawei.com, yangerkun@huawei.com
Subject: [PATCH v3 07/14] ext4: drop extent cache when splitting extent fails
Date: Sat, 29 Nov 2025 18:32:39 +0800 [thread overview]
Message-ID: <20251129103247.686136-8-yi.zhang@huaweicloud.com> (raw)
In-Reply-To: <20251129103247.686136-1-yi.zhang@huaweicloud.com>
From: Zhang Yi <yi.zhang@huawei.com>
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 <yi.zhang@huawei.com>
Reviewed-by: Baokun Li <libaokun1@huawei.com>
Cc: stable@kernel.org
---
fs/ext4/extents.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
index 1094e4923451..945995d68c4d 100644
--- a/fs/ext4/extents.c
+++ b/fs/ext4/extents.c
@@ -3267,7 +3267,7 @@ static struct ext4_ext_path *ext4_split_extent_at(handle_t *handle,
err = PTR_ERR(path);
if (err != -ENOSPC && err != -EDQUOT && err != -ENOMEM)
- return path;
+ goto out_path;
/*
* Get a new path to try to zeroout or fix the extent length.
@@ -3281,7 +3281,7 @@ static struct ext4_ext_path *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 path;
+ goto out_path;
}
depth = ext_depth(inode);
ex = path[depth].p_ext;
@@ -3358,6 +3358,10 @@ static struct ext4_ext_path *ext4_split_extent_at(handle_t *handle,
ext4_free_ext_path(path);
path = ERR_PTR(err);
}
+out_path:
+ if (IS_ERR(path))
+ /* Remove all remaining potentially stale extents. */
+ ext4_es_remove_extent(inode, ee_block, ee_len);
ext4_ext_show_leaf(inode, path);
return path;
}
--
2.46.1
next prev parent reply other threads:[~2025-11-29 10:35 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-29 10:32 [PATCH v3 00/14] ext4: replace ext4_es_insert_extent() when caching on-disk extents Zhang Yi
2025-11-29 10:32 ` [PATCH v3 01/14] ext4: subdivide EXT4_EXT_DATA_VALID1 Zhang Yi
2025-11-29 10:32 ` [PATCH v3 02/14] ext4: don't zero the entire extent if EXT4_EXT_DATA_PARTIAL_VALID1 Zhang Yi
2025-11-29 10:32 ` [PATCH v3 03/14] ext4: don't set EXT4_GET_BLOCKS_CONVERT when splitting before submitting I/O Zhang Yi
2025-11-29 10:32 ` [PATCH v3 04/14] ext4: correct the mapping status if the extent has been zeroed Zhang Yi
2025-11-29 10:32 ` [PATCH v3 05/14] ext4: don't cache extent during splitting extent Zhang Yi
2025-11-29 10:32 ` [PATCH v3 06/14] ext4: drop extent cache after doing PARTIAL_VALID1 zeroout Zhang Yi
2025-11-29 17:33 ` Ojaswin Mujoo
2025-11-29 10:32 ` Zhang Yi [this message]
2025-11-29 17:34 ` [PATCH v3 07/14] ext4: drop extent cache when splitting extent fails Ojaswin Mujoo
2025-11-29 10:32 ` [PATCH v3 08/14] ext4: cleanup zeroout in ext4_split_extent_at() Zhang Yi
2025-11-29 10:32 ` [PATCH v3 09/14] ext4: cleanup useless out label in __es_remove_extent() Zhang Yi
2025-11-29 10:32 ` [PATCH v3 10/14] ext4: make __es_remove_extent() check extent status Zhang Yi
2025-11-29 10:32 ` [PATCH v3 11/14] ext4: make ext4_es_cache_extent() support overwrite existing extents Zhang Yi
2025-11-29 10:32 ` [PATCH v3 12/14] ext4: adjust the debug info in ext4_es_cache_extent() Zhang Yi
2025-11-29 10:32 ` [PATCH v3 13/14] ext4: replace ext4_es_insert_extent() when caching on-disk extents Zhang Yi
2025-11-29 10:32 ` [PATCH v3 14/14] ext4: drop the TODO comment in ext4_es_insert_extent() Zhang Yi
2025-12-01 16:23 ` [PATCH v3 00/14] ext4: replace ext4_es_insert_extent() when caching on-disk extents Theodore Ts'o
2025-12-01 16:42 ` Theodore Tso
2025-12-02 1:15 ` Zhang Yi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251129103247.686136-8-yi.zhang@huaweicloud.com \
--to=yi.zhang@huaweicloud.com \
--cc=adilger.kernel@dilger.ca \
--cc=jack@suse.cz \
--cc=libaokun1@huawei.com \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=ojaswin@linux.ibm.com \
--cc=tytso@mit.edu \
--cc=yangerkun@huawei.com \
--cc=yi.zhang@huawei.com \
--cc=yizhang089@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).