[-next,4/6] ext4: allocate extended attribute value in vmalloc area

Message ID 20221206015806.3420321-5-yebin@huaweicloud.com
State New
Headers
Series Fix two issue about ext4 extended attribute |

Commit Message

Ye Bin Dec. 6, 2022, 1:58 a.m. UTC
  From: Ye Bin <yebin10@huawei.com>

Now, extended attribute value maxium length is 64K. The memory requested here
does not need continuous physical addresses, so it is appropriate to use
kvmalloc to request memory. At the same time, it can also cope with the
situation that the extension attribute will become longer in the future.

Signed-off-by: Ye Bin <yebin10@huawei.com>
---
 fs/ext4/xattr.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
  

Patch

diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
index 75287422c36c..efa623658c12 100644
--- a/fs/ext4/xattr.c
+++ b/fs/ext4/xattr.c
@@ -2579,7 +2579,7 @@  static int ext4_xattr_move_to_block(handle_t *handle, struct inode *inode,
 
 	is = kzalloc(sizeof(struct ext4_xattr_ibody_find), GFP_NOFS);
 	bs = kzalloc(sizeof(struct ext4_xattr_block_find), GFP_NOFS);
-	buffer = kmalloc(value_size, GFP_NOFS);
+	buffer = kvmalloc(value_size, GFP_NOFS);
 	b_entry_name = kmalloc(entry->e_name_len + 1, GFP_NOFS);
 	if (!is || !bs || !buffer || !b_entry_name) {
 		error = -ENOMEM;
@@ -2631,7 +2631,7 @@  static int ext4_xattr_move_to_block(handle_t *handle, struct inode *inode,
 	error = 0;
 out:
 	kfree(b_entry_name);
-	kfree(buffer);
+	kvfree(buffer);
 	if (is)
 		brelse(is->iloc.bh);
 	if (bs)