提交 31e818fe 编写于 作者: D David Sterba

btrfs: cleanup, use kmalloc_array/kcalloc array helpers

Convert kmalloc(nr * size, ..) to kmalloc_array that does additional
overflow checks, the zeroing variant is kcalloc.
Signed-off-by: NDavid Sterba <dsterba@suse.cz>
上级 f8c269d7
...@@ -2990,8 +2990,8 @@ static void __btrfsic_submit_bio(int rw, struct bio *bio) ...@@ -2990,8 +2990,8 @@ static void __btrfsic_submit_bio(int rw, struct bio *bio)
(unsigned long long)bio->bi_iter.bi_sector, (unsigned long long)bio->bi_iter.bi_sector,
dev_bytenr, bio->bi_bdev); dev_bytenr, bio->bi_bdev);
mapped_datav = kmalloc(sizeof(*mapped_datav) * bio->bi_vcnt, mapped_datav = kmalloc_array(bio->bi_vcnt,
GFP_NOFS); sizeof(*mapped_datav), GFP_NOFS);
if (!mapped_datav) if (!mapped_datav)
goto leave; goto leave;
cur_bytenr = dev_bytenr; cur_bytenr = dev_bytenr;
......
...@@ -622,7 +622,7 @@ int btrfs_submit_compressed_read(struct inode *inode, struct bio *bio, ...@@ -622,7 +622,7 @@ int btrfs_submit_compressed_read(struct inode *inode, struct bio *bio,
cb->orig_bio = bio; cb->orig_bio = bio;
nr_pages = DIV_ROUND_UP(compressed_len, PAGE_CACHE_SIZE); nr_pages = DIV_ROUND_UP(compressed_len, PAGE_CACHE_SIZE);
cb->compressed_pages = kzalloc(sizeof(struct page *) * nr_pages, cb->compressed_pages = kcalloc(nr_pages, sizeof(struct page *),
GFP_NOFS); GFP_NOFS);
if (!cb->compressed_pages) if (!cb->compressed_pages)
goto fail1; goto fail1;
......
...@@ -578,7 +578,7 @@ tree_mod_log_insert_move(struct btrfs_fs_info *fs_info, ...@@ -578,7 +578,7 @@ tree_mod_log_insert_move(struct btrfs_fs_info *fs_info,
if (!tree_mod_need_log(fs_info, eb)) if (!tree_mod_need_log(fs_info, eb))
return 0; return 0;
tm_list = kzalloc(nr_items * sizeof(struct tree_mod_elem *), flags); tm_list = kcalloc(nr_items, sizeof(struct tree_mod_elem *), flags);
if (!tm_list) if (!tm_list)
return -ENOMEM; return -ENOMEM;
...@@ -677,7 +677,7 @@ tree_mod_log_insert_root(struct btrfs_fs_info *fs_info, ...@@ -677,7 +677,7 @@ tree_mod_log_insert_root(struct btrfs_fs_info *fs_info,
if (log_removal && btrfs_header_level(old_root) > 0) { if (log_removal && btrfs_header_level(old_root) > 0) {
nritems = btrfs_header_nritems(old_root); nritems = btrfs_header_nritems(old_root);
tm_list = kzalloc(nritems * sizeof(struct tree_mod_elem *), tm_list = kcalloc(nritems, sizeof(struct tree_mod_elem *),
flags); flags);
if (!tm_list) { if (!tm_list) {
ret = -ENOMEM; ret = -ENOMEM;
...@@ -814,7 +814,7 @@ tree_mod_log_eb_copy(struct btrfs_fs_info *fs_info, struct extent_buffer *dst, ...@@ -814,7 +814,7 @@ tree_mod_log_eb_copy(struct btrfs_fs_info *fs_info, struct extent_buffer *dst,
if (btrfs_header_level(dst) == 0 && btrfs_header_level(src) == 0) if (btrfs_header_level(dst) == 0 && btrfs_header_level(src) == 0)
return 0; return 0;
tm_list = kzalloc(nr_items * 2 * sizeof(struct tree_mod_elem *), tm_list = kcalloc(nr_items * 2, sizeof(struct tree_mod_elem *),
GFP_NOFS); GFP_NOFS);
if (!tm_list) if (!tm_list)
return -ENOMEM; return -ENOMEM;
...@@ -905,8 +905,7 @@ tree_mod_log_free_eb(struct btrfs_fs_info *fs_info, struct extent_buffer *eb) ...@@ -905,8 +905,7 @@ tree_mod_log_free_eb(struct btrfs_fs_info *fs_info, struct extent_buffer *eb)
return 0; return 0;
nritems = btrfs_header_nritems(eb); nritems = btrfs_header_nritems(eb);
tm_list = kzalloc(nritems * sizeof(struct tree_mod_elem *), tm_list = kcalloc(nritems, sizeof(struct tree_mod_elem *), GFP_NOFS);
GFP_NOFS);
if (!tm_list) if (!tm_list)
return -ENOMEM; return -ENOMEM;
......
...@@ -302,7 +302,7 @@ static int csum_tree_block(struct btrfs_root *root, struct extent_buffer *buf, ...@@ -302,7 +302,7 @@ static int csum_tree_block(struct btrfs_root *root, struct extent_buffer *buf,
offset += cur_len; offset += cur_len;
} }
if (csum_size > sizeof(inline_result)) { if (csum_size > sizeof(inline_result)) {
result = kzalloc(csum_size * sizeof(char), GFP_NOFS); result = kzalloc(csum_size, GFP_NOFS);
if (!result) if (!result)
return 1; return 1;
} else { } else {
......
...@@ -185,8 +185,8 @@ static int __btrfs_lookup_bio_sums(struct btrfs_root *root, ...@@ -185,8 +185,8 @@ static int __btrfs_lookup_bio_sums(struct btrfs_root *root,
nblocks = bio->bi_iter.bi_size >> inode->i_sb->s_blocksize_bits; nblocks = bio->bi_iter.bi_size >> inode->i_sb->s_blocksize_bits;
if (!dst) { if (!dst) {
if (nblocks * csum_size > BTRFS_BIO_INLINE_CSUM_SIZE) { if (nblocks * csum_size > BTRFS_BIO_INLINE_CSUM_SIZE) {
btrfs_bio->csum_allocated = kmalloc(nblocks * csum_size, btrfs_bio->csum_allocated = kmalloc_array(nblocks,
GFP_NOFS); csum_size, GFP_NOFS);
if (!btrfs_bio->csum_allocated) { if (!btrfs_bio->csum_allocated) {
btrfs_free_path(path); btrfs_free_path(path);
return -ENOMEM; return -ENOMEM;
......
...@@ -1481,7 +1481,7 @@ static noinline ssize_t __btrfs_buffered_write(struct file *file, ...@@ -1481,7 +1481,7 @@ static noinline ssize_t __btrfs_buffered_write(struct file *file,
PAGE_CACHE_SIZE / (sizeof(struct page *))); PAGE_CACHE_SIZE / (sizeof(struct page *)));
nrptrs = min(nrptrs, current->nr_dirtied_pause - current->nr_dirtied); nrptrs = min(nrptrs, current->nr_dirtied_pause - current->nr_dirtied);
nrptrs = max(nrptrs, 8); nrptrs = max(nrptrs, 8);
pages = kmalloc(nrptrs * sizeof(struct page *), GFP_KERNEL); pages = kmalloc_array(nrptrs, sizeof(struct page *), GFP_KERNEL);
if (!pages) if (!pages)
return -ENOMEM; return -ENOMEM;
......
...@@ -298,7 +298,7 @@ static int io_ctl_init(struct io_ctl *io_ctl, struct inode *inode, ...@@ -298,7 +298,7 @@ static int io_ctl_init(struct io_ctl *io_ctl, struct inode *inode,
memset(io_ctl, 0, sizeof(struct io_ctl)); memset(io_ctl, 0, sizeof(struct io_ctl));
io_ctl->pages = kzalloc(sizeof(struct page *) * num_pages, GFP_NOFS); io_ctl->pages = kcalloc(num_pages, sizeof(struct page *), GFP_NOFS);
if (!io_ctl->pages) if (!io_ctl->pages)
return -ENOMEM; return -ENOMEM;
......
...@@ -463,7 +463,7 @@ static noinline void compress_file_range(struct inode *inode, ...@@ -463,7 +463,7 @@ static noinline void compress_file_range(struct inode *inode,
*/ */
if (inode_need_compress(inode)) { if (inode_need_compress(inode)) {
WARN_ON(pages); WARN_ON(pages);
pages = kzalloc(sizeof(struct page *) * nr_pages, GFP_NOFS); pages = kcalloc(nr_pages, sizeof(struct page *), GFP_NOFS);
if (!pages) { if (!pages) {
/* just bail out to the uncompressed code */ /* just bail out to the uncompressed code */
goto cont; goto cont;
......
...@@ -1807,8 +1807,7 @@ static void __raid_recover_end_io(struct btrfs_raid_bio *rbio) ...@@ -1807,8 +1807,7 @@ static void __raid_recover_end_io(struct btrfs_raid_bio *rbio)
int err; int err;
int i; int i;
pointers = kzalloc(rbio->real_stripes * sizeof(void *), pointers = kcalloc(rbio->real_stripes, sizeof(void *), GFP_NOFS);
GFP_NOFS);
if (!pointers) { if (!pointers) {
err = -ENOMEM; err = -ENOMEM;
goto cleanup_io; goto cleanup_io;
......
...@@ -964,9 +964,8 @@ static int scrub_handle_errored_block(struct scrub_block *sblock_to_check) ...@@ -964,9 +964,8 @@ static int scrub_handle_errored_block(struct scrub_block *sblock_to_check)
* the statistics. * the statistics.
*/ */
sblocks_for_recheck = kzalloc(BTRFS_MAX_MIRRORS * sblocks_for_recheck = kcalloc(BTRFS_MAX_MIRRORS,
sizeof(*sblocks_for_recheck), sizeof(*sblocks_for_recheck), GFP_NOFS);
GFP_NOFS);
if (!sblocks_for_recheck) { if (!sblocks_for_recheck) {
spin_lock(&sctx->stat_lock); spin_lock(&sctx->stat_lock);
sctx->stat.malloc_errors++; sctx->stat.malloc_errors++;
......
...@@ -4288,7 +4288,7 @@ static int __btrfs_alloc_chunk(struct btrfs_trans_handle *trans, ...@@ -4288,7 +4288,7 @@ static int __btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
max_chunk_size = min(div_factor(fs_devices->total_rw_bytes, 1), max_chunk_size = min(div_factor(fs_devices->total_rw_bytes, 1),
max_chunk_size); max_chunk_size);
devices_info = kzalloc(sizeof(*devices_info) * fs_devices->rw_devices, devices_info = kcalloc(fs_devices->rw_devices, sizeof(*devices_info),
GFP_NOFS); GFP_NOFS);
if (!devices_info) if (!devices_info)
return -ENOMEM; return -ENOMEM;
...@@ -5542,7 +5542,7 @@ int btrfs_rmap_block(struct btrfs_mapping_tree *map_tree, ...@@ -5542,7 +5542,7 @@ int btrfs_rmap_block(struct btrfs_mapping_tree *map_tree,
rmap_len = map->stripe_len * nr_data_stripes(map); rmap_len = map->stripe_len * nr_data_stripes(map);
} }
buf = kzalloc(sizeof(u64) * map->num_stripes, GFP_NOFS); buf = kcalloc(map->num_stripes, sizeof(u64), GFP_NOFS);
BUG_ON(!buf); /* -ENOMEM */ BUG_ON(!buf); /* -ENOMEM */
for (i = 0; i < map->num_stripes; i++) { for (i = 0; i < map->num_stripes; i++) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册