mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-05-24 10:39:52 +00:00
btrfs: avoid unnecessary memory allocation and copy at overwrite_item()
There's no need to allocate memory and copy from both the destination and source extent buffers to compare if the items are equal, we can instead use memcmp_extent_buffer() which allows to do only one memory allocation and copy instead of two. So use memcmp_extent_buffer() instead of memcmp(), allowing us to avoid one memory allocation, which can fail or be slow while under memory heavy pressure, avoid the memory copying and reducing code. Signed-off-by: Filipe Manana <fdmanana@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
9db9c7dd5b
commit
e48264e601
1 changed files with 2 additions and 10 deletions
|
@ -422,7 +422,6 @@ static int overwrite_item(struct btrfs_trans_handle *trans,
|
|||
|
||||
if (ret == 0) {
|
||||
char *src_copy;
|
||||
char *dst_copy;
|
||||
u32 dst_size = btrfs_item_size(path->nodes[0],
|
||||
path->slots[0]);
|
||||
if (dst_size != item_size)
|
||||
|
@ -432,23 +431,16 @@ static int overwrite_item(struct btrfs_trans_handle *trans,
|
|||
btrfs_release_path(path);
|
||||
return 0;
|
||||
}
|
||||
dst_copy = kmalloc(item_size, GFP_NOFS);
|
||||
src_copy = kmalloc(item_size, GFP_NOFS);
|
||||
if (!dst_copy || !src_copy) {
|
||||
if (!src_copy) {
|
||||
btrfs_release_path(path);
|
||||
kfree(dst_copy);
|
||||
kfree(src_copy);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
read_extent_buffer(eb, src_copy, src_ptr, item_size);
|
||||
|
||||
dst_ptr = btrfs_item_ptr_offset(path->nodes[0], path->slots[0]);
|
||||
read_extent_buffer(path->nodes[0], dst_copy, dst_ptr,
|
||||
item_size);
|
||||
ret = memcmp(dst_copy, src_copy, item_size);
|
||||
ret = memcmp_extent_buffer(path->nodes[0], src_copy, dst_ptr, item_size);
|
||||
|
||||
kfree(dst_copy);
|
||||
kfree(src_copy);
|
||||
/*
|
||||
* they have the same contents, just return, this saves
|
||||
|
|
Loading…
Add table
Reference in a new issue