2022-12-07 07:21:17

by yebin

[permalink] [raw]
Subject: [PATCH v2 4/6] ext4: allocate extended attribute value in vmalloc area

From: Ye Bin <[email protected]>

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 extended attribute will become longer in the future.

Signed-off-by: Ye Bin <[email protected]>
---
fs/ext4/xattr.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

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)
--
2.31.1


2022-12-07 10:59:46

by Jan Kara

[permalink] [raw]
Subject: Re: [PATCH v2 4/6] ext4: allocate extended attribute value in vmalloc area

On Wed 07-12-22 15:40:41, Ye Bin wrote:
> From: Ye Bin <[email protected]>
>
> 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 extended attribute will become longer in the future.
>
> Signed-off-by: Ye Bin <[email protected]>

Looks good. Feel free to add:

Reviewed-by: Jan Kara <[email protected]>

Thanks!

Honza

> ---
> fs/ext4/xattr.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> 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)
> --
> 2.31.1
>
--
Jan Kara <[email protected]>
SUSE Labs, CR