Jan Kara 99b40a
From b40ebaf63851b3a401b0dc9263843538f64f5ce6 Mon Sep 17 00:00:00 2001
Jan Kara 99b40a
From: Jan Kara <jack@suse.cz>
Jan Kara 99b40a
Date: Mon, 21 Nov 2022 14:09:29 +0100
Jan Kara 99b40a
Subject: [PATCH] ext4: avoid BUG_ON when creating xattrs
Jan Kara 99b40a
Git-commit: b40ebaf63851b3a401b0dc9263843538f64f5ce6
Jan Kara 99b40a
Patch-mainline: v6.2-rc1
Jan Kara 99b40a
References: bsc#1205496
Jan Kara 99b40a
Jan Kara 99b40a
Commit fb0a387dcdcd ("ext4: limit block allocations for indirect-block
Jan Kara 99b40a
files to < 2^32") added code to try to allocate xattr block with 32-bit
Jan Kara 99b40a
block number for indirect block based files on the grounds that these
Jan Kara 99b40a
files cannot use larger block numbers. It also added BUG_ON when
Jan Kara 99b40a
allocated block could not fit into 32 bits. This is however bogus
Jan Kara 99b40a
reasoning because xattr block is stored in inode->i_file_acl and
Jan Kara 99b40a
inode->i_file_acl_hi and as such even indirect block based files can
Jan Kara 99b40a
happily use full 48 bits for xattr block number. The proper handling
Jan Kara 99b40a
seems to be there basically since 64-bit block number support was added.
Jan Kara 99b40a
So remove the bogus limitation and BUG_ON.
Jan Kara 99b40a
Jan Kara 99b40a
Cc: Eric Sandeen <sandeen@redhat.com>
Jan Kara 99b40a
Fixes: fb0a387dcdcd ("ext4: limit block allocations for indirect-block files to < 2^32")
Jan Kara 99b40a
Signed-off-by: Jan Kara <jack@suse.cz>
Jan Kara 99b40a
Link: https://lore.kernel.org/r/20221121130929.32031-1-jack@suse.cz
Jan Kara 99b40a
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Jan Kara 99b40a
Cc: stable@kernel.org
Jan Kara 99b40a
Acked-by: Jan Kara <jack@suse.cz>
Jan Kara 99b40a
Jan Kara 99b40a
---
Jan Kara 99b40a
 fs/ext4/xattr.c | 8 --------
Jan Kara 99b40a
 1 file changed, 8 deletions(-)
Jan Kara 99b40a
Jan Kara 99b40a
diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
Jan Kara 99b40a
index 718ef3987f94..4d1c701f0eec 100644
Jan Kara 99b40a
--- a/fs/ext4/xattr.c
Jan Kara 99b40a
+++ b/fs/ext4/xattr.c
Jan Kara 99b40a
@@ -2071,19 +2071,11 @@ ext4_xattr_block_set(handle_t *handle, struct inode *inode,
Jan Kara 99b40a
 
Jan Kara 99b40a
 			goal = ext4_group_first_block_no(sb,
Jan Kara 99b40a
 						EXT4_I(inode)->i_block_group);
Jan Kara 99b40a
-
Jan Kara 99b40a
-			/* non-extent files can't have physical blocks past 2^32 */
Jan Kara 99b40a
-			if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)))
Jan Kara 99b40a
-				goal = goal & EXT4_MAX_BLOCK_FILE_PHYS;
Jan Kara 99b40a
-
Jan Kara 99b40a
 			block = ext4_new_meta_blocks(handle, inode, goal, 0,
Jan Kara 99b40a
 						     NULL, &error);
Jan Kara 99b40a
 			if (error)
Jan Kara 99b40a
 				goto cleanup;
Jan Kara 99b40a
 
Jan Kara 99b40a
-			if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)))
Jan Kara 99b40a
-				BUG_ON(block > EXT4_MAX_BLOCK_FILE_PHYS);
Jan Kara 99b40a
-
Jan Kara 99b40a
 			ea_idebug(inode, "creating block %llu",
Jan Kara 99b40a
 				  (unsigned long long)block);
Jan Kara 99b40a
 
Jan Kara 99b40a
-- 
Jan Kara 99b40a
2.35.3
Jan Kara 99b40a