summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2026-07-28 17:47:25 +0200
committerJan Kara <jack@suse.cz>2026-07-29 15:12:21 +0200
commit6abf69e2e7f91e20567367cd75ee539d39e510bf (patch)
tree217af5473f903bf3a3c98def84bf5c1e5fba8306
parentb2eb2e28860423c428fcfdd8b2bc86915418042d (diff)
downloadlinux-next-6abf69e2e7f91e20567367cd75ee539d39e510bf.tar.gz
linux-next-6abf69e2e7f91e20567367cd75ee539d39e510bf.zip
ext2: Simplify error handling of IO error when adding xattr
When we fail to write out inode when adding new xattr block, we backed out some changes (like quota modifications) but left others (like block allocation or inode xattr block modification). Just leave the inode intact in this case because we can hardly reach a consistent state and defer fixing to e2fsck. Also remove outdated comment and special data handling since sync_inode_metadata() does not write out any data. Link: https://patch.msgid.link/20260728154724.3934977-2-jack@suse.cz Signed-off-by: Jan Kara <jack@suse.cz>
-rw-r--r--fs/ext2/xattr.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/fs/ext2/xattr.c b/fs/ext2/xattr.c
index e55d16abf422..5f49ec4afc36 100644
--- a/fs/ext2/xattr.c
+++ b/fs/ext2/xattr.c
@@ -779,16 +779,12 @@ ext2_xattr_set2(struct inode *inode, struct buffer_head *old_bh,
inode_set_ctime_current(inode);
if (IS_SYNC(inode)) {
error = sync_inode_metadata(inode, 1);
- /* In case sync failed due to ENOSPC the inode was actually
- * written (only some dirty data were not) so we just proceed
- * as if nothing happened and cleanup the unused block */
- if (error && error != -ENOSPC) {
- if (new_bh && new_bh != old_bh) {
- dquot_free_block_nodirty(inode, 1);
- mark_inode_dirty(inode);
- }
+ /*
+ * Inode writeout failed. Backing everything out is complex so
+ * let's just leave it for e2fsck to cleanup the mess.
+ */
+ if (error)
goto cleanup;
- }
} else
mark_inode_dirty(inode);