Btrfs-progs: add missing path alloc return value check
PATCH 1/1 Btrfs-progs: add missing path alloc return value check
--- extent-tree.c | 2 ++ 1 file changed, 2 insertions(+)
extent-tree.c +2 -0
@@ -1577,6 +1577,8 @@ int btrfs_set_block_flags(struct btrfs_trans_handle *trans, BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA); path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ; path->reada =1 ; key.objectid = bytenr;
Signature · 1 line
1.7.9.5
Quoted 11 lines · Filipe David Borba Manana
Signed-off-by Filipe David Borba Manana <[email protected]>--- extent-tree.c | 2 ++ 1 file changed, 2 insertions(+)extent-tree.c +0
-0
extent-tree.c int btrfs_set_block_flags(struct btrfs_trans_handle *trans, · line 1584
Quoted 8 lines
extent-tree.c +2
-0@@ -1577,6 +1577,8 @@ int btrfs_set_block_flags(struct btrfs_trans_handle *trans, BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA); path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ; path->reada =1 ; key.objectid = bytenr;
Many functions have the same problem, you can fix them in this patch.
Thanks
Miao
PATCH v2 1/1 Btrfs-progs: add missing path alloc return value check
In reply to Filipe David Borba MananaAlso remove unused path in extent-tree.c:finish_current_insert().
---
V2: added 1 more path alloc check and removed unnecessary path
allocation in extent-tree.c:finish_current_insert().
extent-tree.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
extent-tree.c +4 -4
@@ -1487,6 +1487,8 @@ int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans, } path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ; path->reada =1 ; key.objectid = bytenr;
@@ -1577,6 +1579,8 @@ int btrfs_set_block_flags(struct btrfs_trans_handle *trans, BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA); path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ; path->reada =1 ; key.objectid = bytenr;
@@ -2078,7 +2082,6 @@ static int finish_current_insert(struct btrfs_trans_handle *trans,u64 end;u64 priv;struct btrfs_fs_info *info = extent_root->fs_info; -struct btrfs_path *path;struct pending_extent_op *extent_op;struct btrfs_key key;int ret;
@@ -2086,8 +2089,6 @@ static int finish_current_insert(struct btrfs_trans_handle *trans,btrfs_fs_incompat (extent_root->fs_info,BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA ); - path =btrfs_alloc_path (); -while (1 ) { ret =find_first_extent_bit (&info->extent_ins,0 , &start, &end,EXTENT_LOCKED );
@@ -2121,7 +2122,6 @@ static int finish_current_insert(struct btrfs_trans_handle *trans, GFP_NOFS);kfree (extent_op); } -btrfs_free_path (path);return 0 ; }
Signature · 1 line
1.7.9.5
PATCH v3 1/1 Btrfs-progs: add missing path alloc return value check
In reply to Filipe David Borba MananaAlso remove unused path in extent-tree.c:finish_current_insert().
---
V2: added 1 more path alloc check and removed unnecessary path
allocation in extent-tree.c:finish_current_insert().
V3: added missing path alloc checks to dir-item.c, file-item.c
and btrfs-corrupt-block.c too.
btrfs-corrupt-block.c | 2 ++ dir-item.c | 2 ++ extent-tree.c | 8 ++++---- file-item.c | 2 ++ 4 files changed, 10 insertions(+), 4 deletions(-)
btrfs-corrupt-block.c +2 -0
@@ -159,6 +159,8 @@ static int corrupt_extent(struct btrfs_trans_handle *trans,int should_del =rand () %3 ; path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ; key.objectid = bytenr; key.type = (u8)-1 ;
dir-item.c +2 -0
@@ -123,6 +123,8 @@ int btrfs_insert_dir_item(struct btrfs_trans_handle *trans, struct btrfs_rootbtrfs_set_key_type (&key,BTRFS_DIR_ITEM_KEY ); key.offset =btrfs_name_hash (name, name_len); path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ; data_size =sizeof (*dir_item) + name_len; dir_item =insert_with_overflow (trans, root, path, &key, data_size, name, name_len);
extent-tree.c +4 -4
@@ -1487,6 +1487,8 @@ int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans, } path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ; path->reada =1 ; key.objectid = bytenr;
@@ -1577,6 +1579,8 @@ int btrfs_set_block_flags(struct btrfs_trans_handle *trans, BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA); path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ; path->reada =1 ; key.objectid = bytenr;
@@ -2078,7 +2082,6 @@ static int finish_current_insert(struct btrfs_trans_handle *trans,u64 end;u64 priv;struct btrfs_fs_info *info = extent_root->fs_info; -struct btrfs_path *path;struct pending_extent_op *extent_op;struct btrfs_key key;int ret;
@@ -2086,8 +2089,6 @@ static int finish_current_insert(struct btrfs_trans_handle *trans,btrfs_fs_incompat (extent_root->fs_info,BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA ); - path =btrfs_alloc_path (); -while (1 ) { ret =find_first_extent_bit (&info->extent_ins,0 , &start, &end,EXTENT_LOCKED );
@@ -2121,7 +2122,6 @@ static int finish_current_insert(struct btrfs_trans_handle *trans, GFP_NOFS);kfree (extent_op); } -btrfs_free_path (path);return 0 ; }
file-item.c +2 -0
@@ -417,6 +417,8 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans, root = root->fs_info->csum_root; path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ;while (1 ) { key.objectid =BTRFS_EXTENT_CSUM_OBJECTID ;
Signature · 1 line
1.7.9.5
Quoted 9 lines · Filipe David Borba Manana
Also remove unused path in extent-tree.c:finish_current_insert().
Signed-off-by Filipe David Borba Manana <[email protected]>---
V2: added 1 more path alloc check and removed unnecessary path
allocation in extent-tree.c:finish_current_insert().
V3: added missing path alloc checks todir-item.c,file-item.c
andbtrfs-corrupt-block.ctoo.
fixup_extent_refs() in cmds-check.c and btrfs_add_root_ref() in root-tree.c also miss the path allocation check.
Thanks
Miao
Quoted 94 lines
btrfs-corrupt-block.c | 2 ++ dir-item.c | 2 ++ extent-tree.c | 8 ++++---- file-item.c | 2 ++ 4 files changed, 10 insertions(+), 4 deletions(-)btrfs-corrupt-block.c +2
-0@@ -159,6 +159,8 @@ static int corrupt_extent(struct btrfs_trans_handle *trans,int should_del =rand () %3 ; path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ; key.objectid = bytenr; key.type = (u8)-1 ;dir-item.c +2
-0@@ -123,6 +123,8 @@ int btrfs_insert_dir_item(struct btrfs_trans_handle *trans, struct btrfs_rootbtrfs_set_key_type (&key,BTRFS_DIR_ITEM_KEY ); key.offset =btrfs_name_hash (name, name_len); path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ; data_size =sizeof (*dir_item) + name_len; dir_item =insert_with_overflow (trans, root, path, &key, data_size, name, name_len);extent-tree.c +4
-4@@ -1487,6 +1487,8 @@ int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans, } path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ; path->reada =1 ; key.objectid = bytenr;@@ -1577,6 +1579,8 @@ int btrfs_set_block_flags(struct btrfs_trans_handle *trans, BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA); path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ; path->reada =1 ; key.objectid = bytenr;@@ -2078,7 +2082,6 @@ static int finish_current_insert(struct btrfs_trans_handle *trans,u64 end;u64 priv;struct btrfs_fs_info *info = extent_root->fs_info; -struct btrfs_path *path;struct pending_extent_op *extent_op;struct btrfs_key key;int ret;@@ -2086,8 +2089,6 @@ static int finish_current_insert(struct btrfs_trans_handle *trans,btrfs_fs_incompat (extent_root->fs_info,BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA ); - path =btrfs_alloc_path (); -while (1 ) { ret =find_first_extent_bit (&info->extent_ins,0 , &start, &end,EXTENT_LOCKED );@@ -2121,7 +2122,6 @@ static int finish_current_insert(struct btrfs_trans_handle *trans, GFP_NOFS);kfree (extent_op); } -btrfs_free_path (path);return 0 ; }file-item.c +2
-0@@ -417,6 +417,8 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans, root = root->fs_info->csum_root; path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ;while (1 ) { key.objectid =BTRFS_EXTENT_CSUM_OBJECTID ;
PATCH v4 1/1 Btrfs-progs: add missing path alloc return value check
In reply to Filipe David Borba MananaAlso remove unused path in extent-tree.c:finish_current_insert().
---
V2: added 1 more path alloc check and removed unnecessary path
allocation in extent-tree.c:finish_current_insert().
V3: added missing path alloc checks to dir-item.c, file-item.c
and btrfs-corrupt-block.c too.
V4: added missing patch alloc checks to cmd-checks.c and
root-tree.c.
btrfs-corrupt-block.c | 2 ++ cmds-check.c | 2 ++ dir-item.c | 2 ++ extent-tree.c | 8 ++++---- file-item.c | 2 ++ root-tree.c | 2 ++ 6 files changed, 14 insertions(+), 4 deletions(-)
btrfs-corrupt-block.c +2 -0
@@ -159,6 +159,8 @@ static int corrupt_extent(struct btrfs_trans_handle *trans,int should_del =rand () %3 ; path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ; key.objectid = bytenr; key.type = (u8)-1 ;
cmds-check.c +2 -0
@@ -4561,6 +4561,8 @@ static int fixup_extent_refs(struct btrfs_trans_handle *trans, flags =BTRFS_BLOCK_FLAG_FULL_BACKREF ; path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ;/* step one, make sure all of the backrefs agree */ ret =verify_backrefs (trans, info, path, rec);
dir-item.c +2 -0
@@ -123,6 +123,8 @@ int btrfs_insert_dir_item(struct btrfs_trans_handle *trans, struct btrfs_rootbtrfs_set_key_type (&key,BTRFS_DIR_ITEM_KEY ); key.offset =btrfs_name_hash (name, name_len); path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ; data_size =sizeof (*dir_item) + name_len; dir_item =insert_with_overflow (trans, root, path, &key, data_size, name, name_len);
extent-tree.c +4 -4
@@ -1487,6 +1487,8 @@ int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans, } path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ; path->reada =1 ; key.objectid = bytenr;
@@ -1577,6 +1579,8 @@ int btrfs_set_block_flags(struct btrfs_trans_handle *trans, BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA); path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ; path->reada =1 ; key.objectid = bytenr;
@@ -2078,7 +2082,6 @@ static int finish_current_insert(struct btrfs_trans_handle *trans,u64 end;u64 priv;struct btrfs_fs_info *info = extent_root->fs_info; -struct btrfs_path *path;struct pending_extent_op *extent_op;struct btrfs_key key;int ret;
@@ -2086,8 +2089,6 @@ static int finish_current_insert(struct btrfs_trans_handle *trans,btrfs_fs_incompat (extent_root->fs_info,BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA ); - path =btrfs_alloc_path (); -while (1 ) { ret =find_first_extent_bit (&info->extent_ins,0 , &start, &end,EXTENT_LOCKED );
@@ -2121,7 +2122,6 @@ static int finish_current_insert(struct btrfs_trans_handle *trans, GFP_NOFS);kfree (extent_op); } -btrfs_free_path (path);return 0 ; }
file-item.c +2 -0
@@ -417,6 +417,8 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans, root = root->fs_info->csum_root; path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ;while (1 ) { key.objectid =BTRFS_EXTENT_CSUM_OBJECTID ;
root-tree.c +2 -0
@@ -264,6 +264,8 @@ int btrfs_add_root_ref(struct btrfs_trans_handle *trans, path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ; key.objectid = root_id; key.type = type;
Signature · 1 line
1.7.9.5
Quoted 11 lines · Filipe David Borba Manana
Also remove unused path in extent-tree.c:finish_current_insert().
Signed-off-by Filipe David Borba Manana <[email protected]>---
V2: added 1 more path alloc check and removed unnecessary path
allocation in extent-tree.c:finish_current_insert().
V3: added missing path alloc checks todir-item.c,file-item.c
andbtrfs-corrupt-block.ctoo.
V4: added missing patch alloc checks tocmd-checks.cand
root-tree.c.
Quoted 122 lines
btrfs-corrupt-block.c | 2 ++ cmds-check.c | 2 ++ dir-item.c | 2 ++ extent-tree.c | 8 ++++---- file-item.c | 2 ++ root-tree.c | 2 ++ 6 files changed, 14 insertions(+), 4 deletions(-)btrfs-corrupt-block.c +2
-0@@ -159,6 +159,8 @@ static int corrupt_extent(struct btrfs_trans_handle *trans,int should_del =rand () %3 ; path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ; key.objectid = bytenr; key.type = (u8)-1 ;cmds-check.c +2
-0@@ -4561,6 +4561,8 @@ static int fixup_extent_refs(struct btrfs_trans_handle *trans, flags =BTRFS_BLOCK_FLAG_FULL_BACKREF ; path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ;/* step one, make sure all of the backrefs agree */ ret =verify_backrefs (trans, info, path, rec);dir-item.c +2
-0@@ -123,6 +123,8 @@ int btrfs_insert_dir_item(struct btrfs_trans_handle *trans, struct btrfs_rootbtrfs_set_key_type (&key,BTRFS_DIR_ITEM_KEY ); key.offset =btrfs_name_hash (name, name_len); path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ; data_size =sizeof (*dir_item) + name_len; dir_item =insert_with_overflow (trans, root, path, &key, data_size, name, name_len);extent-tree.c +4
-4@@ -1487,6 +1487,8 @@ int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans, } path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ; path->reada =1 ; key.objectid = bytenr;@@ -1577,6 +1579,8 @@ int btrfs_set_block_flags(struct btrfs_trans_handle *trans, BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA); path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ; path->reada =1 ; key.objectid = bytenr;@@ -2078,7 +2082,6 @@ static int finish_current_insert(struct btrfs_trans_handle *trans,u64 end;u64 priv;struct btrfs_fs_info *info = extent_root->fs_info; -struct btrfs_path *path;struct pending_extent_op *extent_op;struct btrfs_key key;int ret;@@ -2086,8 +2089,6 @@ static int finish_current_insert(struct btrfs_trans_handle *trans,btrfs_fs_incompat (extent_root->fs_info,BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA ); - path =btrfs_alloc_path (); -while (1 ) { ret =find_first_extent_bit (&info->extent_ins,0 , &start, &end,EXTENT_LOCKED );@@ -2121,7 +2122,6 @@ static int finish_current_insert(struct btrfs_trans_handle *trans, GFP_NOFS);kfree (extent_op); } -btrfs_free_path (path);return 0 ; }file-item.c +2
-0@@ -417,6 +417,8 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans, root = root->fs_info->csum_root; path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ;while (1 ) { key.objectid =BTRFS_EXTENT_CSUM_OBJECTID ;root-tree.c +2
-0@@ -264,6 +264,8 @@ int btrfs_add_root_ref(struct btrfs_trans_handle *trans, path =btrfs_alloc_path (); +if (!path) +return -ENOMEM ; key.objectid = root_id; key.type = type;