Commit 3cc64e7e authored by Zhihao Cheng's avatar Zhihao Cheng Committed by David Sterba

btrfs: clarify error returns values in __load_free_space_cache

Return value in __load_free_space_cache is not properly set after
(unlikely) memory allocation failures and 0 is returned instead.
This is not a problem for the caller load_free_space_cache because only
value 1 is considered as 'cache loaded' but for clarity it's better
to set the errors accordingly.

Fixes: a67509c3 ("Btrfs: add a io_ctl struct and helpers for dealing with the space cache")
Reported-by: default avatarHulk Robot <hulkci@huawei.com>
Signed-off-by: default avatarZhihao Cheng <chengzhihao1@huawei.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 4f4317c1
...@@ -775,8 +775,10 @@ static int __load_free_space_cache(struct btrfs_root *root, struct inode *inode, ...@@ -775,8 +775,10 @@ static int __load_free_space_cache(struct btrfs_root *root, struct inode *inode,
while (num_entries) { while (num_entries) {
e = kmem_cache_zalloc(btrfs_free_space_cachep, e = kmem_cache_zalloc(btrfs_free_space_cachep,
GFP_NOFS); GFP_NOFS);
if (!e) if (!e) {
ret = -ENOMEM;
goto free_cache; goto free_cache;
}
ret = io_ctl_read_entry(&io_ctl, e, &type); ret = io_ctl_read_entry(&io_ctl, e, &type);
if (ret) { if (ret) {
...@@ -785,6 +787,7 @@ static int __load_free_space_cache(struct btrfs_root *root, struct inode *inode, ...@@ -785,6 +787,7 @@ static int __load_free_space_cache(struct btrfs_root *root, struct inode *inode,
} }
if (!e->bytes) { if (!e->bytes) {
ret = -1;
kmem_cache_free(btrfs_free_space_cachep, e); kmem_cache_free(btrfs_free_space_cachep, e);
goto free_cache; goto free_cache;
} }
...@@ -805,6 +808,7 @@ static int __load_free_space_cache(struct btrfs_root *root, struct inode *inode, ...@@ -805,6 +808,7 @@ static int __load_free_space_cache(struct btrfs_root *root, struct inode *inode,
e->bitmap = kmem_cache_zalloc( e->bitmap = kmem_cache_zalloc(
btrfs_free_space_bitmap_cachep, GFP_NOFS); btrfs_free_space_bitmap_cachep, GFP_NOFS);
if (!e->bitmap) { if (!e->bitmap) {
ret = -ENOMEM;
kmem_cache_free( kmem_cache_free(
btrfs_free_space_cachep, e); btrfs_free_space_cachep, e);
goto free_cache; goto free_cache;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment