[PATCH] block: bio: use struct_size() in kmalloc()

2019-05-17 Thread xiaolinkui
One of the more common cases of allocation size calculations is finding
the size of a structure that has a zero-sized array at the end, along
with memory for some number of elements for that array. For example:

struct foo {
int stuff;
struct boo entry[];
};

instance = kmalloc(sizeof(struct foo) + count * sizeof(struct boo), GFP_KERNEL);

Instead of leaving these open-coded and prone to type mistakes, we can
now use the new struct_size() helper:

instance = kmalloc(struct_size(instance, entry, count), GFP_KERNEL);

Signed-off-by: xiaolinkui 
---
 block/bio.c | 7 ++-
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/block/bio.c b/block/bio.c
index 683cbb4..847ac60 100644
--- a/block/bio.c
+++ b/block/bio.c
@@ -436,9 +436,7 @@ struct bio *bio_alloc_bioset(gfp_t gfp_mask, unsigned int 
nr_iovecs,
if (nr_iovecs > UIO_MAXIOV)
return NULL;
 
-   p = kmalloc(sizeof(struct bio) +
-   nr_iovecs * sizeof(struct bio_vec),
-   gfp_mask);
+   p = kmalloc(struct_size(bio, bi_io_vec, nr_iovecs), gfp_mask);
front_pad = 0;
inline_vecs = nr_iovecs;
} else {
@@ -1120,8 +1118,7 @@ static struct bio_map_data *bio_alloc_map_data(struct 
iov_iter *data,
if (data->nr_segs > UIO_MAXIOV)
return NULL;
 
-   bmd = kmalloc(sizeof(struct bio_map_data) +
-  sizeof(struct iovec) * data->nr_segs, gfp_mask);
+   bmd = kmalloc(struct_size(bmd, iov, data->nr_segs), gfp_mask);
if (!bmd)
return NULL;
memcpy(bmd->iov, data->iov, sizeof(struct iovec) * data->nr_segs);
-- 
2.7.4





[PATCH] gpu: drm: use struct_size() in kmalloc()

2019-05-17 Thread xiaolinkui
Use struct_size() helper to keep code simple.

Signed-off-by: xiaolinkui 
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
index 22bd21e..4717a64 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
@@ -1375,8 +1375,7 @@ int amdgpu_ras_init(struct amdgpu_device *adev)
if (con)
return 0;
 
-   con = kmalloc(sizeof(struct amdgpu_ras) +
-   sizeof(struct ras_manager) * AMDGPU_RAS_BLOCK_COUNT,
+   con = kmalloc(struct_size(con, objs, AMDGPU_RAS_BLOCK_COUNT),
GFP_KERNEL|__GFP_ZERO);
if (!con)
return -ENOMEM;
-- 
2.7.4





[PATCH 1/3] lib: assoc_array: use struct_size() in kmalloc()

2019-05-17 Thread xiaolinkui
Use the new struct_size() helper to keep code simple.

Signed-off-by: xiaolinkui 
---
 lib/assoc_array.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/lib/assoc_array.c b/lib/assoc_array.c
index edc3c14..0e69b5b 100644
--- a/lib/assoc_array.c
+++ b/lib/assoc_array.c
@@ -1494,8 +1494,7 @@ int assoc_array_gc(struct assoc_array *array,
shortcut = assoc_array_ptr_to_shortcut(cursor);
keylen = round_up(shortcut->skip_to_level, 
ASSOC_ARRAY_KEY_CHUNK_SIZE);
keylen >>= ASSOC_ARRAY_KEY_CHUNK_SHIFT;
-   new_s = kmalloc(sizeof(struct assoc_array_shortcut) +
-   keylen * sizeof(unsigned long), GFP_KERNEL);
+   new_s = kmalloc(struct_size(new_s, index_key, keylen), 
GFP_KERNEL);
if (!new_s)
goto enomem;
pr_devel("dup shortcut %p -> %p\n", shortcut, new_s);
-- 
2.7.4





[PATCH] arch: s390: use struct_size() in kmalloc()

2019-05-17 Thread xiaolinkui
Use the new struct_size() helper to keep code simple.

Signed-off-by: xiaolinkui 
---
 arch/s390/include/asm/idals.h | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/arch/s390/include/asm/idals.h b/arch/s390/include/asm/idals.h
index 15578fd..6fb7ace 100644
--- a/arch/s390/include/asm/idals.h
+++ b/arch/s390/include/asm/idals.h
@@ -122,8 +122,7 @@ idal_buffer_alloc(size_t size, int page_order)
 
nr_ptrs = (size + IDA_BLOCK_SIZE - 1) >> IDA_SIZE_LOG;
nr_chunks = (4096 << page_order) >> IDA_SIZE_LOG;
-   ib = kmalloc(sizeof(struct idal_buffer) + nr_ptrs*sizeof(void *),
-GFP_DMA | GFP_KERNEL);
+   ib = kmalloc(struct_size(ib, data, nr_ptrs), GFP_DMA | GFP_KERNEL);
if (ib == NULL)
return ERR_PTR(-ENOMEM);
ib->size = size;
-- 
2.7.4





[PATCH] nvme: target: use struct_size() in kmalloc()

2019-05-17 Thread xiaolinkui
Use struct_size() to keep code sample.
One of the more common cases of allocation size calculations is finding
the size of a structure that has a zero-sized array at the end, along
with memory for some number of elements for that array. For example:

struct foo {
int stuff;
struct boo entry[];
};

instance = kmalloc(sizeof(struct foo) + count * sizeof(struct boo), GFP_KERNEL);

Instead of leaving these open-coded and prone to type mistakes, we can
now use the new struct_size() helper:

instance = kmalloc(struct_size(instance, entry, count), GFP_KERNEL);

Signed-off-by: xiaolinkui 
---
 drivers/nvme/target/admin-cmd.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/nvme/target/admin-cmd.c b/drivers/nvme/target/admin-cmd.c
index 9f72d51..6f9f830 100644
--- a/drivers/nvme/target/admin-cmd.c
+++ b/drivers/nvme/target/admin-cmd.c
@@ -248,8 +248,8 @@ static void nvmet_execute_get_log_page_ana(struct nvmet_req 
*req)
u16 status;
 
status = NVME_SC_INTERNAL;
-   desc = kmalloc(sizeof(struct nvme_ana_group_desc) +
-   NVMET_MAX_NAMESPACES * sizeof(__le32), GFP_KERNEL);
+   desc = kmalloc(struct_size(desc, nsids, NVMET_MAX_NAMESPACES),
+   GFP_KERNEL);
if (!desc)
goto out;
 
-- 
2.7.4