btrfs: Fix returned errno codes
v2 cover btrfs: Fix returned errno codes
Hi,
These two patches fix instances where -1 is used to specify a buffer allocation fail, instead of using -ENOMEM.
Patch 1/2 is already reviewed by David Sterba.
Luis de Bethencourt (2):
btrfs: check-integrity: Fix returned errno codes
btrfs: reada: Fix returned errno code
fs/btrfs/check-integrity.c | 4 ++-- fs/btrfs/reada.c | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-)
Signature · 1 line
2.5.1
PATCH v2 1/2 btrfs: check-integrity: Fix returned errno codes
check-integrity is using -1 instead of the -ENOMEM defined macro to specify that a buffer allocation failed. Since the error number is propagated, the caller will get a -EPERM which is the wrong error condition.
Also, the smatch tool complains with the following warnings:btrfsic_process_superblock() warn: returning -1 instead of -ENOMEM is sloppy btrfsic_read_block() warn: returning -1 instead of -ENOMEM is sloppy
--- fs/btrfs/check-integrity.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
fs/btrfs/check-integrity.c +2 -2
@@ -667,7 +667,7 @@ static int btrfsic_process_superblock(struct btrfsic_state *state, selected_super =kzalloc (sizeof (*selected_super),GFP_NOFS );if (NULL == selected_super) {printk (KERN_INFO "btrfsic: error, kmalloc failed!\n" ); -return -1 ; +return -ENOMEM ; }list_for_each_entry (device, dev_head, dev_list) {
@@ -1660,7 +1660,7 @@ static int btrfsic_read_block(struct btrfsic_state *state, sizeof(*block_ctx->pagev)) * num_pages, GFP_NOFS);if (!block_ctx->mem_to_free) -return -1 ; +return -ENOMEM ; block_ctx->datav = block_ctx->mem_to_free; block_ctx->pagev = (struct page **)(block_ctx->datav + num_pages);for (i =0 ; i < num_pages; i++) {
Signature · 1 line
2.5.1
PATCH v2 2/2 btrfs: reada: Fix returned errno code
In reply to Luis de Bethencourtreada is using -1 instead of the -ENOMEM defined macro to specify that a buffer allocation failed. Since the error number is propagated, the caller will get a -EPERM which is the wrong error condition.
Also, updating the caller to return the exact value from reada_add_block.
Smatch tool warning:reada_add_block() warn: returning -1 instead of -ENOMEM is sloppy
--- fs/btrfs/reada.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
fs/btrfs/reada.c +5 -3
@@ -569,7 +569,7 @@ static int reada_add_block(struct reada_control *rc, u64 logical, rec =kzalloc (sizeof (*rec),GFP_NOFS );if (!rec) {reada_extent_put (root->fs_info, re); -return -1 ; +return -ENOMEM ; } rec->rc = rc;
@@ -918,6 +918,7 @@ struct reada_control *btrfs_reada_add(struct btrfs_root *root,u64 start;u64 generation;int level; +int ret;struct extent_buffer *node;static struct btrfs_key max_key = { .objectid = (u64)-1 ,
@@ -943,9 +944,10 @@ struct reada_control *btrfs_reada_add(struct btrfs_root *root, generation =btrfs_header_generation (node);free_extent_buffer (node); -if (reada_add_block (rc, start, &max_key, level, generation)) { + ret =reada_add_block (rc, start, &max_key, level, generation); +if (ret) {kfree (rc); -return ERR_PTR (-ENOMEM ); +return ERR_PTR (ret); }reada_start_machine (root->fs_info);
Signature · 1 line
2.5.1
Re: [PATCH v2 2/2] btrfs: reada: Fix returned errno code
Quoted 11 lines · Luis de Bethencourt
reada is using -1 instead of the
-ENOMEMdefined macro to specify that a buffer allocation failed. Since the error number is propagated, the caller will get a-EPERMwhich is the wrong error condition.Also, updating the caller to return the exact value from
reada_add_block.Smatch tool warning:
reada_add_block()warn: returning -1 instead of-ENOMEMis sloppySigned-off-by Luis de Bethencourt <[email protected]>