summaryrefslogtreecommitdiff
path: root/drivers/md
diff options
context:
space:
mode:
authorKees Cook <kees@kernel.org>2026-02-21 10:49:23 +0300
committerKees Cook <kees@kernel.org>2026-02-21 12:02:28 +0300
commit69050f8d6d075dc01af7a5f2f550a8067510366f (patch)
treebb265f94d9dfa7876c06a5d9f88673d496a15341 /drivers/md
parentd39a1d7486d98668dd34aaa6732aad7977c45f5a (diff)
downloadlinux-69050f8d6d075dc01af7a5f2f550a8067510366f.tar.xz
treewide: Replace kmalloc with kmalloc_obj for non-scalar types
This is the result of running the Coccinelle script from scripts/coccinelle/api/kmalloc_objs.cocci. The script is designed to avoid scalar types (which need careful case-by-case checking), and instead replace kmalloc-family calls that allocate struct or union object instances: Single allocations: kmalloc(sizeof(TYPE), ...) are replaced with: kmalloc_obj(TYPE, ...) Array allocations: kmalloc_array(COUNT, sizeof(TYPE), ...) are replaced with: kmalloc_objs(TYPE, COUNT, ...) Flex array allocations: kmalloc(struct_size(PTR, FAM, COUNT), ...) are replaced with: kmalloc_flex(*PTR, FAM, COUNT, ...) (where TYPE may also be *VAR) The resulting allocations no longer return "void *", instead returning "TYPE *". Signed-off-by: Kees Cook <kees@kernel.org>
Diffstat (limited to 'drivers/md')
-rw-r--r--drivers/md/bcache/alloc.c2
-rw-r--r--drivers/md/bcache/btree.c2
-rw-r--r--drivers/md/bcache/debug.c2
-rw-r--r--drivers/md/bcache/super.c15
-rw-r--r--drivers/md/bcache/sysfs.c2
-rw-r--r--drivers/md/dm-bio-prison-v1.c4
-rw-r--r--drivers/md/dm-bio-prison-v2.c2
-rw-r--r--drivers/md/dm-cache-background-tracker.c2
-rw-r--r--drivers/md/dm-cache-metadata.c2
-rw-r--r--drivers/md/dm-cache-policy-smq.c2
-rw-r--r--drivers/md/dm-cache-target.c4
-rw-r--r--drivers/md/dm-clone-metadata.c2
-rw-r--r--drivers/md/dm-clone-target.c4
-rw-r--r--drivers/md/dm-crypt.c9
-rw-r--r--drivers/md/dm-delay.c2
-rw-r--r--drivers/md/dm-dust.c4
-rw-r--r--drivers/md/dm-ebs-target.c2
-rw-r--r--drivers/md/dm-era-target.c4
-rw-r--r--drivers/md/dm-exception-store.c2
-rw-r--r--drivers/md/dm-flakey.c2
-rw-r--r--drivers/md/dm-init.c4
-rw-r--r--drivers/md/dm-integrity.c27
-rw-r--r--drivers/md/dm-io.c2
-rw-r--r--drivers/md/dm-ioctl.c4
-rw-r--r--drivers/md/dm-kcopyd.c4
-rw-r--r--drivers/md/dm-linear.c2
-rw-r--r--drivers/md/dm-log-userspace-base.c2
-rw-r--r--drivers/md/dm-log-writes.c4
-rw-r--r--drivers/md/dm-log.c4
-rw-r--r--drivers/md/dm-mpath.c6
-rw-r--r--drivers/md/dm-path-selector.c2
-rw-r--r--drivers/md/dm-pcache/cache.c3
-rw-r--r--drivers/md/dm-pcache/cache_key.c3
-rw-r--r--drivers/md/dm-pcache/dm_pcache.c2
-rw-r--r--drivers/md/dm-ps-historical-service-time.c4
-rw-r--r--drivers/md/dm-ps-io-affinity.c7
-rw-r--r--drivers/md/dm-ps-queue-length.c4
-rw-r--r--drivers/md/dm-ps-round-robin.c4
-rw-r--r--drivers/md/dm-ps-service-time.c4
-rw-r--r--drivers/md/dm-raid.c2
-rw-r--r--drivers/md/dm-raid1.c2
-rw-r--r--drivers/md/dm-region-hash.c4
-rw-r--r--drivers/md/dm-snap-persistent.c6
-rw-r--r--drivers/md/dm-snap-transient.c2
-rw-r--r--drivers/md/dm-snap.c17
-rw-r--r--drivers/md/dm-stats.c5
-rw-r--r--drivers/md/dm-stripe.c2
-rw-r--r--drivers/md/dm-switch.c2
-rw-r--r--drivers/md/dm-table.c6
-rw-r--r--drivers/md/dm-target.c2
-rw-r--r--drivers/md/dm-thin-metadata.c4
-rw-r--r--drivers/md/dm-thin.c6
-rw-r--r--drivers/md/dm-unstripe.c2
-rw-r--r--drivers/md/dm-verity-fec.c2
-rw-r--r--drivers/md/dm-verity-target.c8
-rw-r--r--drivers/md/dm-writecache.c7
-rw-r--r--drivers/md/dm-zoned-metadata.c12
-rw-r--r--drivers/md/dm-zoned-reclaim.c2
-rw-r--r--drivers/md/dm-zoned-target.c8
-rw-r--r--drivers/md/md-bitmap.c7
-rw-r--r--drivers/md/md-cluster.c8
-rw-r--r--drivers/md/md-linear.c2
-rw-r--r--drivers/md/md-llbitmap.c2
-rw-r--r--drivers/md/md.c14
-rw-r--r--drivers/md/persistent-data/dm-block-manager.c2
-rw-r--r--drivers/md/persistent-data/dm-btree.c2
-rw-r--r--drivers/md/persistent-data/dm-space-map-disk.c4
-rw-r--r--drivers/md/persistent-data/dm-space-map-metadata.c2
-rw-r--r--drivers/md/persistent-data/dm-transaction-manager.c6
-rw-r--r--drivers/md/raid0.c7
-rw-r--r--drivers/md/raid1.c19
-rw-r--r--drivers/md/raid10.c18
-rw-r--r--drivers/md/raid5-cache.c4
-rw-r--r--drivers/md/raid5-ppl.c6
-rw-r--r--drivers/md/raid5.c18
75 files changed, 185 insertions, 199 deletions
diff --git a/drivers/md/bcache/alloc.c b/drivers/md/bcache/alloc.c
index 7708d92df23e..90cc6ed4bd6d 100644
--- a/drivers/md/bcache/alloc.c
+++ b/drivers/md/bcache/alloc.c
@@ -697,7 +697,7 @@ int bch_open_buckets_alloc(struct cache_set *c)
spin_lock_init(&c->data_bucket_lock);
for (i = 0; i < MAX_OPEN_BUCKETS; i++) {
- struct open_bucket *b = kzalloc(sizeof(*b), GFP_KERNEL);
+ struct open_bucket *b = kzalloc_obj(*b, GFP_KERNEL);
if (!b)
return -ENOMEM;
diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c
index 3ed39c823826..27a129d47d0a 100644
--- a/drivers/md/bcache/btree.c
+++ b/drivers/md/bcache/btree.c
@@ -585,7 +585,7 @@ static struct btree *mca_bucket_alloc(struct cache_set *c,
* kzalloc() is necessary here for initialization,
* see code comments in bch_btree_keys_init().
*/
- struct btree *b = kzalloc(sizeof(struct btree), gfp);
+ struct btree *b = kzalloc_obj(struct btree, gfp);
if (!b)
return NULL;
diff --git a/drivers/md/bcache/debug.c b/drivers/md/bcache/debug.c
index f327456fc4e0..55f5e202015d 100644
--- a/drivers/md/bcache/debug.c
+++ b/drivers/md/bcache/debug.c
@@ -208,7 +208,7 @@ static int bch_dump_open(struct inode *inode, struct file *file)
struct cache_set *c = inode->i_private;
struct dump_iterator *i;
- i = kzalloc(sizeof(struct dump_iterator), GFP_KERNEL);
+ i = kzalloc_obj(struct dump_iterator, GFP_KERNEL);
if (!i)
return -ENOMEM;
diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
index 238d12ffdae8..a304ef80820b 100644
--- a/drivers/md/bcache/super.c
+++ b/drivers/md/bcache/super.c
@@ -1527,8 +1527,7 @@ static CLOSURE_CALLBACK(flash_dev_flush)
static int flash_dev_run(struct cache_set *c, struct uuid_entry *u)
{
int err = -ENOMEM;
- struct bcache_device *d = kzalloc(sizeof(struct bcache_device),
- GFP_KERNEL);
+ struct bcache_device *d = kzalloc_obj(struct bcache_device, GFP_KERNEL);
if (!d)
goto err_ret;
@@ -1864,7 +1863,7 @@ struct cache_set *bch_cache_set_alloc(struct cache_sb *sb)
{
int iter_size;
struct cache *ca = container_of(sb, struct cache, sb);
- struct cache_set *c = kzalloc(sizeof(struct cache_set), GFP_KERNEL);
+ struct cache_set *c = kzalloc_obj(struct cache_set, GFP_KERNEL);
if (!c)
return NULL;
@@ -2543,8 +2542,8 @@ static void register_device_async(struct async_reg_args *args)
static void *alloc_holder_object(struct cache_sb *sb)
{
if (SB_IS_BDEV(sb))
- return kzalloc(sizeof(struct cached_dev), GFP_KERNEL);
- return kzalloc(sizeof(struct cache), GFP_KERNEL);
+ return kzalloc_obj(struct cached_dev, GFP_KERNEL);
+ return kzalloc_obj(struct cache, GFP_KERNEL);
}
static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr,
@@ -2581,7 +2580,7 @@ static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr,
if (!path)
goto out_module_put;
- sb = kmalloc(sizeof(struct cache_sb), GFP_KERNEL);
+ sb = kmalloc_obj(struct cache_sb, GFP_KERNEL);
if (!sb)
goto out_free_path;
@@ -2633,7 +2632,7 @@ static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr,
if (async_registration) {
/* register in asynchronous way */
struct async_reg_args *args =
- kzalloc(sizeof(struct async_reg_args), GFP_KERNEL);
+ kzalloc_obj(struct async_reg_args, GFP_KERNEL);
if (!args) {
ret = -ENOMEM;
@@ -2710,7 +2709,7 @@ static ssize_t bch_pending_bdevs_cleanup(struct kobject *k,
mutex_lock(&bch_register_lock);
list_for_each_entry_safe(dc, tdc, &uncached_devices, list) {
- pdev = kmalloc(sizeof(struct pdev), GFP_KERNEL);
+ pdev = kmalloc_obj(struct pdev, GFP_KERNEL);
if (!pdev)
break;
pdev->dc = dc;
diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c
index 72f38e5b6f5c..b30424075106 100644
--- a/drivers/md/bcache/sysfs.c
+++ b/drivers/md/bcache/sysfs.c
@@ -415,7 +415,7 @@ STORE(__cached_dev)
buf, SB_LABEL_SIZE);
bch_uuid_write(dc->disk.c);
}
- env = kzalloc(sizeof(struct kobj_uevent_env), GFP_KERNEL);
+ env = kzalloc_obj(struct kobj_uevent_env, GFP_KERNEL);
if (!env)
return -ENOMEM;
add_uevent_var(env, "DRIVER=bcache");
diff --git a/drivers/md/dm-bio-prison-v1.c b/drivers/md/dm-bio-prison-v1.c
index b4d1c4329df3..fc8bb30dc533 100644
--- a/drivers/md/dm-bio-prison-v1.c
+++ b/drivers/md/dm-bio-prison-v1.c
@@ -44,7 +44,7 @@ struct dm_bio_prison *dm_bio_prison_create(void)
struct dm_bio_prison *prison;
num_locks = dm_num_hash_locks();
- prison = kzalloc(struct_size(prison, regions, num_locks), GFP_KERNEL);
+ prison = kzalloc_flex(*prison, regions, num_locks, GFP_KERNEL);
if (!prison)
return NULL;
prison->num_locks = num_locks;
@@ -301,7 +301,7 @@ struct dm_deferred_set *dm_deferred_set_create(void)
int i;
struct dm_deferred_set *ds;
- ds = kmalloc(sizeof(*ds), GFP_KERNEL);
+ ds = kmalloc_obj(*ds, GFP_KERNEL);
if (!ds)
return NULL;
diff --git a/drivers/md/dm-bio-prison-v2.c b/drivers/md/dm-bio-prison-v2.c
index cf433b0cf742..d4daf426c2c7 100644
--- a/drivers/md/dm-bio-prison-v2.c
+++ b/drivers/md/dm-bio-prison-v2.c
@@ -36,7 +36,7 @@ static struct kmem_cache *_cell_cache;
*/
struct dm_bio_prison_v2 *dm_bio_prison_create_v2(struct workqueue_struct *wq)
{
- struct dm_bio_prison_v2 *prison = kzalloc(sizeof(*prison), GFP_KERNEL);
+ struct dm_bio_prison_v2 *prison = kzalloc_obj(*prison, GFP_KERNEL);
int ret;
if (!prison)
diff --git a/drivers/md/dm-cache-background-tracker.c b/drivers/md/dm-cache-background-tracker.c
index b4165f172d62..fb5efaab11a3 100644
--- a/drivers/md/dm-cache-background-tracker.c
+++ b/drivers/md/dm-cache-background-tracker.c
@@ -26,7 +26,7 @@ struct kmem_cache *btracker_work_cache = NULL;
struct background_tracker *btracker_create(unsigned int max_work)
{
- struct background_tracker *b = kmalloc(sizeof(*b), GFP_KERNEL);
+ struct background_tracker *b = kmalloc_obj(*b, GFP_KERNEL);
if (!b) {
DMERR("couldn't create background_tracker");
diff --git a/drivers/md/dm-cache-metadata.c b/drivers/md/dm-cache-metadata.c
index a9a1ab284076..5060a58605a2 100644
--- a/drivers/md/dm-cache-metadata.c
+++ b/drivers/md/dm-cache-metadata.c
@@ -760,7 +760,7 @@ static struct dm_cache_metadata *metadata_open(struct block_device *bdev,
int r;
struct dm_cache_metadata *cmd;
- cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+ cmd = kzalloc_obj(*cmd, GFP_KERNEL);
if (!cmd) {
DMERR("could not allocate metadata struct");
return ERR_PTR(-ENOMEM);
diff --git a/drivers/md/dm-cache-policy-smq.c b/drivers/md/dm-cache-policy-smq.c
index 7e1e8cc0e33a..bec1b5e95170 100644
--- a/drivers/md/dm-cache-policy-smq.c
+++ b/drivers/md/dm-cache-policy-smq.c
@@ -1735,7 +1735,7 @@ __smq_create(dm_cblock_t cache_size, sector_t origin_size, sector_t cache_block_
unsigned int i;
unsigned int nr_sentinels_per_queue = 2u * NR_CACHE_LEVELS;
unsigned int total_sentinels = 2u * nr_sentinels_per_queue;
- struct smq_policy *mq = kzalloc(sizeof(*mq), GFP_KERNEL);
+ struct smq_policy *mq = kzalloc_obj(*mq, GFP_KERNEL);
if (!mq)
return NULL;
diff --git a/drivers/md/dm-cache-target.c b/drivers/md/dm-cache-target.c
index 62d1060619dd..be1af992b931 100644
--- a/drivers/md/dm-cache-target.c
+++ b/drivers/md/dm-cache-target.c
@@ -2387,7 +2387,7 @@ static int cache_create(struct cache_args *ca, struct cache **result)
struct dm_cache_metadata *cmd;
bool may_format = ca->features.mode == CM_WRITE;
- cache = kzalloc(sizeof(*cache), GFP_KERNEL);
+ cache = kzalloc_obj(*cache, GFP_KERNEL);
if (!cache)
return -ENOMEM;
@@ -2612,7 +2612,7 @@ static int cache_ctr(struct dm_target *ti, unsigned int argc, char **argv)
struct cache_args *ca;
struct cache *cache = NULL;
- ca = kzalloc(sizeof(*ca), GFP_KERNEL);
+ ca = kzalloc_obj(*ca, GFP_KERNEL);
if (!ca) {
ti->error = "Error allocating memory for cache";
return -ENOMEM;
diff --git a/drivers/md/dm-clone-metadata.c b/drivers/md/dm-clone-metadata.c
index 14c5c28d938b..cb474e852548 100644
--- a/drivers/md/dm-clone-metadata.c
+++ b/drivers/md/dm-clone-metadata.c
@@ -553,7 +553,7 @@ struct dm_clone_metadata *dm_clone_metadata_open(struct block_device *bdev,
int r;
struct dm_clone_metadata *cmd;
- cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
+ cmd = kzalloc_obj(*cmd, GFP_KERNEL);
if (!cmd) {
DMERR("Failed to allocate memory for dm-clone metadata");
return ERR_PTR(-ENOMEM);
diff --git a/drivers/md/dm-clone-target.c b/drivers/md/dm-clone-target.c
index a7f73861a8cd..c9b25af70063 100644
--- a/drivers/md/dm-clone-target.c
+++ b/drivers/md/dm-clone-target.c
@@ -580,7 +580,7 @@ static int hash_table_init(struct clone *clone)
sz = 1 << HASH_TABLE_BITS;
- clone->ht = kvmalloc_array(sz, sizeof(struct hash_table_bucket), GFP_KERNEL);
+ clone->ht = kvmalloc_objs(struct hash_table_bucket, sz, GFP_KERNEL);
if (!clone->ht)
return -ENOMEM;
@@ -1766,7 +1766,7 @@ static int clone_ctr(struct dm_target *ti, unsigned int argc, char **argv)
as.argc = argc;
as.argv = argv;
- clone = kzalloc(sizeof(*clone), GFP_KERNEL);
+ clone = kzalloc_obj(*clone, GFP_KERNEL);
if (!clone) {
ti->error = "Failed to allocate clone structure";
return -ENOMEM;
diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
index 339976d4c2ca..a2f9f0f0db5e 100644
--- a/drivers/md/dm-crypt.c
+++ b/drivers/md/dm-crypt.c
@@ -2334,9 +2334,8 @@ static int crypt_alloc_tfms_skcipher(struct crypt_config *cc, char *ciphermode)
unsigned int i;
int err;
- cc->cipher_tfm.tfms = kcalloc(cc->tfms_count,
- sizeof(struct crypto_skcipher *),
- GFP_KERNEL);
+ cc->cipher_tfm.tfms = kzalloc_objs(struct crypto_skcipher *,
+ cc->tfms_count, GFP_KERNEL);
if (!cc->cipher_tfm.tfms)
return -ENOMEM;
@@ -2364,7 +2363,7 @@ static int crypt_alloc_tfms_aead(struct crypt_config *cc, char *ciphermode)
{
int err;
- cc->cipher_tfm.tfms = kmalloc(sizeof(struct crypto_skcipher *), GFP_KERNEL);
+ cc->cipher_tfm.tfms = kmalloc_obj(struct crypto_skcipher *, GFP_KERNEL);
if (!cc->cipher_tfm.tfms)
return -ENOMEM;
@@ -3238,7 +3237,7 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv)
return -EINVAL;
}
- cc = kzalloc(struct_size(cc, key, key_size), GFP_KERNEL);
+ cc = kzalloc_flex(*cc, key, key_size, GFP_KERNEL);
if (!cc) {
ti->error = "Cannot allocate encryption context";
return -ENOMEM;
diff --git a/drivers/md/dm-delay.c b/drivers/md/dm-delay.c
index 029f04776490..5d2dd07a19b0 100644
--- a/drivers/md/dm-delay.c
+++ b/drivers/md/dm-delay.c
@@ -224,7 +224,7 @@ static int delay_ctr(struct dm_target *ti, unsigned int argc, char **argv)
return -EINVAL;
}
- dc = kzalloc(sizeof(*dc), GFP_KERNEL);
+ dc = kzalloc_obj(*dc, GFP_KERNEL);
if (!dc) {
ti->error = "Cannot allocate context";
return -ENOMEM;
diff --git a/drivers/md/dm-dust.c b/drivers/md/dm-dust.c
index e75310232bbf..a91f96bad0b9 100644
--- a/drivers/md/dm-dust.c
+++ b/drivers/md/dm-dust.c
@@ -108,7 +108,7 @@ static int dust_add_block(struct dust_device *dd, unsigned long long block,
struct badblock *bblock;
unsigned long flags;
- bblock = kmalloc(sizeof(*bblock), GFP_KERNEL);
+ bblock = kmalloc_obj(*bblock, GFP_KERNEL);
if (bblock == NULL) {
if (!dd->quiet_mode)
DMERR("%s: badblock allocation failed", __func__);
@@ -360,7 +360,7 @@ static int dust_ctr(struct dm_target *ti, unsigned int argc, char **argv)
return -EINVAL;
}
- dd = kzalloc(sizeof(struct dust_device), GFP_KERNEL);
+ dd = kzalloc_obj(struct dust_device, GFP_KERNEL);
if (dd == NULL) {
ti->error = "Cannot allocate context";
return -ENOMEM;
diff --git a/drivers/md/dm-ebs-target.c b/drivers/md/dm-ebs-target.c
index b354e74a670e..4c9a25ae90d6 100644
--- a/drivers/md/dm-ebs-target.c
+++ b/drivers/md/dm-ebs-target.c
@@ -257,7 +257,7 @@ static int ebs_ctr(struct dm_target *ti, unsigned int argc, char **argv)
return -EINVAL;
}
- ec = ti->private = kzalloc(sizeof(*ec), GFP_KERNEL);
+ ec = ti->private = kzalloc_obj(*ec, GFP_KERNEL);
if (!ec) {
ti->error = "Cannot allocate ebs context";
return -ENOMEM;
diff --git a/drivers/md/dm-era-target.c b/drivers/md/dm-era-target.c
index 9c84e9d13eca..9bec72f04b9b 100644
--- a/drivers/md/dm-era-target.c
+++ b/drivers/md/dm-era-target.c
@@ -808,7 +808,7 @@ static struct era_metadata *metadata_open(struct block_device *bdev,
bool may_format)
{
int r;
- struct era_metadata *md = kzalloc(sizeof(*md), GFP_KERNEL);
+ struct era_metadata *md = kzalloc_obj(*md, GFP_KERNEL);
if (!md)
return NULL;
@@ -1473,7 +1473,7 @@ static int era_ctr(struct dm_target *ti, unsigned int argc, char **argv)
return -EINVAL;
}
- era = kzalloc(sizeof(*era), GFP_KERNEL);
+ era = kzalloc_obj(*era, GFP_KERNEL);
if (!era) {
ti->error = "Error allocating era structure";
return -ENOMEM;
diff --git a/drivers/md/dm-exception-store.c b/drivers/md/dm-exception-store.c
index 88f119a0a2ae..91d541c66709 100644
--- a/drivers/md/dm-exception-store.c
+++ b/drivers/md/dm-exception-store.c
@@ -204,7 +204,7 @@ int dm_exception_store_create(struct dm_target *ti, int argc, char **argv,
return -EINVAL;
}
- tmp_store = kzalloc(sizeof(*tmp_store), GFP_KERNEL);
+ tmp_store = kzalloc_obj(*tmp_store, GFP_KERNEL);
if (!tmp_store) {
ti->error = "Exception store allocation failed";
return -ENOMEM;
diff --git a/drivers/md/dm-flakey.c b/drivers/md/dm-flakey.c
index 08925aca838c..922e75bfcf17 100644
--- a/drivers/md/dm-flakey.c
+++ b/drivers/md/dm-flakey.c
@@ -277,7 +277,7 @@ static int flakey_ctr(struct dm_target *ti, unsigned int argc, char **argv)
return -EINVAL;
}
- fc = kzalloc(sizeof(*fc), GFP_KERNEL);
+ fc = kzalloc_obj(*fc, GFP_KERNEL);
if (!fc) {
ti->error = "Cannot allocate context";
return -ENOMEM;
diff --git a/drivers/md/dm-init.c b/drivers/md/dm-init.c
index b37bbe762500..703250739a8a 100644
--- a/drivers/md/dm-init.c
+++ b/drivers/md/dm-init.c
@@ -127,7 +127,7 @@ static char __init *dm_parse_table_entry(struct dm_device *dev, char *str)
/* Delimit last field that can be terminated by comma */
next = str_field_delimit(&field[i], ',');
- sp = kzalloc(sizeof(*sp), GFP_KERNEL);
+ sp = kzalloc_obj(*sp, GFP_KERNEL);
if (!sp)
return ERR_PTR(-ENOMEM);
dev->table[n] = sp;
@@ -244,7 +244,7 @@ static int __init dm_parse_devices(struct list_head *devices, char *str)
DMDEBUG("parsing \"%s\"", str);
while (device) {
- dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+ dev = kzalloc_obj(*dev, GFP_KERNEL);
if (!dev)
return -ENOMEM;
list_add_tail(&dev->list, devices);
diff --git a/drivers/md/dm-integrity.c b/drivers/md/dm-integrity.c
index 681b00958d42..3da3ce600758 100644
--- a/drivers/md/dm-integrity.c
+++ b/drivers/md/dm-integrity.c
@@ -4243,7 +4243,8 @@ static struct page_list *dm_integrity_alloc_page_list(unsigned int n_pages)
struct page_list *pl;
unsigned int i;
- pl = kvmalloc_array(n_pages + 1, sizeof(struct page_list), GFP_KERNEL | __GFP_ZERO);
+ pl = kvmalloc_objs(struct page_list, n_pages + 1,
+ GFP_KERNEL | __GFP_ZERO);
if (!pl)
return NULL;
@@ -4277,9 +4278,8 @@ static struct scatterlist **dm_integrity_alloc_journal_scatterlist(struct dm_int
struct scatterlist **sl;
unsigned int i;
- sl = kvmalloc_array(ic->journal_sections,
- sizeof(struct scatterlist *),
- GFP_KERNEL | __GFP_ZERO);
+ sl = kvmalloc_objs(struct scatterlist *, ic->journal_sections,
+ GFP_KERNEL | __GFP_ZERO);
if (!sl)
return NULL;
@@ -4296,8 +4296,7 @@ static struct scatterlist **dm_integrity_alloc_journal_scatterlist(struct dm_int
n_pages = (end_index - start_index + 1);
- s = kvmalloc_array(n_pages, sizeof(struct scatterlist),
- GFP_KERNEL);
+ s = kvmalloc_objs(struct scatterlist, n_pages, GFP_KERNEL);
if (!s) {
dm_integrity_free_journal_scatterlist(ic, sl);
return NULL;
@@ -4500,9 +4499,8 @@ static int create_journal(struct dm_integrity_c *ic, char **error)
goto bad;
}
- sg = kvmalloc_array(ic->journal_pages + 1,
- sizeof(struct scatterlist),
- GFP_KERNEL);
+ sg = kvmalloc_objs(struct scatterlist,
+ ic->journal_pages + 1, GFP_KERNEL);
if (!sg) {
*error = "Unable to allocate sg list";
r = -ENOMEM;
@@ -4569,9 +4567,9 @@ static int create_journal(struct dm_integrity_c *ic, char **error)
r = -ENOMEM;
goto bad;
}
- ic->sk_requests = kvmalloc_array(ic->journal_sections,
- sizeof(struct skcipher_request *),
- GFP_KERNEL | __GFP_ZERO);
+ ic->sk_requests = kvmalloc_objs(struct skcipher_request *,
+ ic->journal_sections,
+ GFP_KERNEL | __GFP_ZERO);
if (!ic->sk_requests) {
*error = "Unable to allocate sk requests";
r = -ENOMEM;
@@ -4703,7 +4701,7 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned int argc, char **argv
return -EINVAL;
}
- ic = kzalloc(sizeof(struct dm_integrity_c), GFP_KERNEL);
+ ic = kzalloc_obj(struct dm_integrity_c, GFP_KERNEL);
if (!ic) {
ti->error = "Cannot allocate integrity context";
return -ENOMEM;
@@ -5272,7 +5270,8 @@ try_smaller_buffer:
r = -ENOMEM;
goto bad;
}
- ic->bbs = kvmalloc_array(ic->n_bitmap_blocks, sizeof(struct bitmap_block_status), GFP_KERNEL);
+ ic->bbs = kvmalloc_objs(struct bitmap_block_status,
+ ic->n_bitmap_blocks, GFP_KERNEL);
if (!ic->bbs) {
ti->error = "Could not allocate memory for bitmap";
r = -ENOMEM;
diff --git a/drivers/md/dm-io.c b/drivers/md/dm-io.c
index c37668790577..d08399b40dac 100644
--- a/drivers/md/dm-io.c
+++ b/drivers/md/dm-io.c
@@ -52,7 +52,7 @@ struct dm_io_client *dm_io_client_create(void)
unsigned int min_ios = dm_get_reserved_bio_based_ios();
int ret;
- client = kzalloc(sizeof(*client), GFP_KERNEL);
+ client = kzalloc_obj(*client, GFP_KERNEL);
if (!client)
return ERR_PTR(-ENOMEM);
diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c
index fd4bf8e1d73e..7ab970430acd 100644
--- a/drivers/md/dm-ioctl.c
+++ b/drivers/md/dm-ioctl.c
@@ -218,7 +218,7 @@ static struct hash_cell *alloc_cell(const char *name, const char *uuid,
{
struct hash_cell *hc;
- hc = kmalloc(sizeof(*hc), GFP_KERNEL);
+ hc = kmalloc_obj(*hc, GFP_KERNEL);
if (!hc)
return NULL;
@@ -2136,7 +2136,7 @@ static int dm_open(struct inode *inode, struct file *filp)
if (unlikely(r))
return r;
- priv = filp->private_data = kmalloc(sizeof(struct dm_file), GFP_KERNEL);
+ priv = filp->private_data = kmalloc_obj(struct dm_file, GFP_KERNEL);
if (!priv)
return -ENOMEM;
diff --git a/drivers/md/dm-kcopyd.c b/drivers/md/dm-kcopyd.c
index cec9a60227b6..03b81b39c65c 100644
--- a/drivers/md/dm-kcopyd.c
+++ b/drivers/md/dm-kcopyd.c
@@ -219,7 +219,7 @@ static struct page_list *alloc_pl(gfp_t gfp)
{
struct page_list *pl;
- pl = kmalloc(sizeof(*pl), gfp);
+ pl = kmalloc_obj(*pl, gfp);
if (!pl)
return NULL;
@@ -918,7 +918,7 @@ struct dm_kcopyd_client *dm_kcopyd_client_create(struct dm_kcopyd_throttle *thro
unsigned int reserve_pages;
struct dm_kcopyd_client *kc;
- kc = kzalloc(sizeof(*kc), GFP_KERNEL);
+ kc = kzalloc_obj(*kc, GFP_KERNEL);
if (!kc)
return ERR_PTR(-ENOMEM);
diff --git a/drivers/md/dm-linear.c b/drivers/md/dm-linear.c
index 73bf290af181..3123227a6e1d 100644
--- a/drivers/md/dm-linear.c
+++ b/drivers/md/dm-linear.c
@@ -39,7 +39,7 @@ static int linear_ctr(struct dm_target *ti, unsigned int argc, char **argv)
return -EINVAL;
}
- lc = kmalloc(sizeof(*lc), GFP_KERNEL);
+ lc = kmalloc_obj(*lc, GFP_KERNEL);
if (lc == NULL) {
ti->error = "Cannot allocate linear context";
return -ENOMEM;
diff --git a/drivers/md/dm-log-userspace-base.c b/drivers/md/dm-log-userspace-base.c
index 607436804a8b..d1bc7d0c89d9 100644
--- a/drivers/md/dm-log-userspace-base.c
+++ b/drivers/md/dm-log-userspace-base.c
@@ -205,7 +205,7 @@ static int userspace_ctr(struct dm_dirty_log *log, struct dm_target *ti,
return -EINVAL;
}
- lc = kzalloc(sizeof(*lc), GFP_KERNEL);
+ lc = kzalloc_obj(*lc, GFP_KERNEL);
if (!lc) {
DMWARN("Unable to allocate userspace log context.");
return -ENOMEM;
diff --git a/drivers/md/dm-log-writes.c b/drivers/md/dm-log-writes.c
index f0c84e7a5daa..a1040e8049aa 100644
--- a/drivers/md/dm-log-writes.c
+++ b/drivers/md/dm-log-writes.c
@@ -519,7 +519,7 @@ static int log_writes_ctr(struct dm_target *ti, unsigned int argc, char **argv)
return -EINVAL;
}
- lc = kzalloc(sizeof(struct log_writes_c), GFP_KERNEL);
+ lc = kzalloc_obj(struct log_writes_c, GFP_KERNEL);
if (!lc) {
ti->error = "Cannot allocate context";
return -ENOMEM;
@@ -587,7 +587,7 @@ static int log_mark(struct log_writes_c *lc, char *data)
struct pending_block *block;
size_t maxsize = lc->sectorsize - sizeof(struct log_write_entry);
- block = kzalloc(sizeof(struct pending_block), GFP_KERNEL);
+ block = kzalloc_obj(struct pending_block, GFP_KERNEL);
if (!block) {
DMERR("Error allocating pending block");
return -ENOMEM;
diff --git a/drivers/md/dm-log.c b/drivers/md/dm-log.c
index bced5a783ee3..7865002678f5 100644
--- a/drivers/md/dm-log.c
+++ b/drivers/md/dm-log.c
@@ -153,7 +153,7 @@ struct dm_dirty_log *dm_dirty_log_create(const char *type_name,
struct dm_dirty_log_type *type;
struct dm_dirty_log *log;
- log = kmalloc(sizeof(*log), GFP_KERNEL);
+ log = kmalloc_obj(*log, GFP_KERNEL);
if (!log)
return NULL;
@@ -402,7 +402,7 @@ static int create_log_context(struct dm_dirty_log *log, struct dm_target *ti,
region_count = dm_sector_div_up(ti->len, region_size);
- lc = kmalloc(sizeof(*lc), GFP_KERNEL);
+ lc = kmalloc_obj(*lc, GFP_KERNEL);
if (!lc) {
DMWARN("couldn't allocate core log");
return -ENOMEM;
diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c
index de03f9b06584..e47cfdf4f5d1 100644
--- a/drivers/md/dm-mpath.c
+++ b/drivers/md/dm-mpath.c
@@ -160,7 +160,7 @@ static bool mpath_double_check_test_bit(int MPATHF_bit, struct multipath *m)
*/
static struct pgpath *alloc_pgpath(void)
{
- struct pgpath *pgpath = kzalloc(sizeof(*pgpath), GFP_KERNEL);
+ struct pgpath *pgpath = kzalloc_obj(*pgpath, GFP_KERNEL);
if (!pgpath)
return NULL;
@@ -179,7 +179,7 @@ static struct priority_group *alloc_priority_group(void)
{
struct priority_group *pg;
- pg = kzalloc(sizeof(*pg), GFP_KERNEL);
+ pg = kzalloc_obj(*pg, GFP_KERNEL);
if (pg)
INIT_LIST_HEAD(&pg->pgpaths);
@@ -216,7 +216,7 @@ static struct multipath *alloc_multipath(struct dm_target *ti)
{
struct multipath *m;
- m = kzalloc(sizeof(*m), GFP_KERNEL);
+ m = kzalloc_obj(*m, GFP_KERNEL);
if (m) {
INIT_LIST_HEAD(&m->priority_groups);
spin_lock_init(&m->lock);
diff --git a/drivers/md/dm-path-selector.c b/drivers/md/dm-path-selector.c
index 2b0ac200f1c0..28dc759e957a 100644
--- a/drivers/md/dm-path-selector.c
+++ b/drivers/md/dm-path-selector.c
@@ -87,7 +87,7 @@ out:
static struct ps_internal *_alloc_path_selector(struct path_selector_type *pst)
{
- struct ps_internal *psi = kzalloc(sizeof(*psi), GFP_KERNEL);
+ struct ps_internal *psi = kzalloc_obj(*psi, GFP_KERNEL);
if (psi)
psi->pst = *pst;
diff --git a/drivers/md/dm-pcache/cache.c b/drivers/md/dm-pcache/cache.c
index 534bf07b794f..a616255b83e2 100644
--- a/drivers/md/dm-pcache/cache.c
+++ b/drivers/md/dm-pcache/cache.c
@@ -138,7 +138,8 @@ static int cache_init(struct dm_pcache *pcache)
struct pcache_cache_dev *cache_dev = &pcache->cache_dev;
int ret;
- cache->segments = kvcalloc(cache_dev->seg_num, sizeof(struct pcache_cache_segment), GFP_KERNEL);
+ cache->segments = kvzalloc_objs(struct pcache_cache_segment,
+ cache_dev->seg_num, GFP_KERNEL);
if (!cache->segments) {
ret = -ENOMEM;
goto err;
diff --git a/drivers/md/dm-pcache/cache_key.c b/drivers/md/dm-pcache/cache_key.c
index 2b77e121f89b..3de356abf952 100644
--- a/drivers/md/dm-pcache/cache_key.c
+++ b/drivers/md/dm-pcache/cache_key.c
@@ -837,7 +837,8 @@ int cache_tree_init(struct pcache_cache *cache, struct pcache_cache_tree *cache_
* Each element is a cache tree structure that contains
* an RB tree root and a spinlock for protecting its contents.
*/
- cache_tree->subtrees = kvcalloc(cache_tree->n_subtrees, sizeof(struct pcache_cache_subtree), GFP_KERNEL);
+ cache_tree->subtrees = kvzalloc_objs(struct pcache_cache_subtree,
+ cache_tree->n_subtrees, GFP_KERNEL);
if (!cache_tree->subtrees) {
ret = -ENOMEM;
goto key_pool_exit;
diff --git a/drivers/md/dm-pcache/dm_pcache.c b/drivers/md/dm-pcache/dm_pcache.c
index e5f5936fa6f0..c36f2afdadc1 100644
--- a/drivers/md/dm-pcache/dm_pcache.c
+++ b/drivers/md/dm-pcache/dm_pcache.c
@@ -281,7 +281,7 @@ static int dm_pcache_ctr(struct dm_target *ti, unsigned int argc, char **argv)
}
/* Allocate memory for the cache structure */
- pcache = kzalloc(sizeof(struct dm_pcache), GFP_KERNEL);
+ pcache = kzalloc_obj(struct dm_pcache, GFP_KERNEL);
if (!pcache)
return -ENOMEM;
diff --git a/drivers/md/dm-ps-historical-service-time.c b/drivers/md/dm-ps-historical-service-time.c
index f07e773d9cc0..a526b5ab0453 100644
--- a/drivers/md/dm-ps-historical-service-time.c
+++ b/drivers/md/dm-ps-historical-service-time.c
@@ -129,7 +129,7 @@ static u64 fixed_ema(u64 last, u64 next, u64 weight)
static struct selector *alloc_selector(void)
{
- struct selector *s = kmalloc(sizeof(*s), GFP_KERNEL);
+ struct selector *s = kmalloc_obj(*s, GFP_KERNEL);
if (s) {
INIT_LIST_HEAD(&s->valid_paths);
@@ -289,7 +289,7 @@ static int hst_add_path(struct path_selector *ps, struct dm_path *path,
}
/* allocate the path */
- pi = kmalloc(sizeof(*pi), GFP_KERNEL);
+ pi = kmalloc_obj(*pi, GFP_KERNEL);
if (!pi) {
*error = "historical-service-time ps: Error allocating path context";
return -ENOMEM;
diff --git a/drivers/md/dm-ps-io-affinity.c b/drivers/md/dm-ps-io-affinity.c
index 80415a045c68..5d69a4a93684 100644
--- a/drivers/md/dm-ps-io-affinity.c
+++ b/drivers/md/dm-ps-io-affinity.c
@@ -53,7 +53,7 @@ static int ioa_add_path(struct path_selector *ps, struct dm_path *path,
return -EINVAL;
}
- pi = kzalloc(sizeof(*pi), GFP_KERNEL);
+ pi = kzalloc_obj(*pi, GFP_KERNEL);
if (!pi) {
*error = "io-affinity ps: Error allocating path context";
return -ENOMEM;
@@ -112,12 +112,11 @@ static int ioa_create(struct path_selector *ps, unsigned int argc, char **argv)
{
struct selector *s;
- s = kmalloc(sizeof(*s), GFP_KERNEL);
+ s = kmalloc_obj(*s, GFP_KERNEL);
if (!s)
return -ENOMEM;
- s->path_map = kcalloc(nr_cpu_ids, sizeof(struct path_info *),
- GFP_KERNEL);
+ s->path_map = kzalloc_objs(struct path_info *, nr_cpu_ids, GFP_KERNEL);
if (!s->path_map)
goto free_selector;
diff --git a/drivers/md/dm-ps-queue-length.c b/drivers/md/dm-ps-queue-length.c
index 9c68701ed7a4..d2663b1b136c 100644
--- a/drivers/md/dm-ps-queue-length.c
+++ b/drivers/md/dm-ps-queue-length.c
@@ -42,7 +42,7 @@ struct path_info {
static struct selector *alloc_selector(void)
{
- struct selector *s = kmalloc(sizeof(*s), GFP_KERNEL);
+ struct selector *s = kmalloc_obj(*s, GFP_KERNEL);
if (s) {
INIT_LIST_HEAD(&s->valid_paths);
@@ -142,7 +142,7 @@ static int ql_add_path(struct path_selector *ps, struct dm_path *path,
}
/* Allocate the path information structure */
- pi = kmalloc(sizeof(*pi), GFP_KERNEL);
+ pi = kmalloc_obj(*pi, GFP_KERNEL);
if (!pi) {
*error = "queue-length ps: Error allocating path information";
return -ENOMEM;
diff --git a/drivers/md/dm-ps-round-robin.c b/drivers/md/dm-ps-round-robin.c
index 0c12f4073461..ec8b9f27d3e7 100644
--- a/drivers/md/dm-ps-round-robin.c
+++ b/drivers/md/dm-ps-round-robin.c
@@ -55,7 +55,7 @@ struct selector {
static struct selector *alloc_selector(void)
{
- struct selector *s = kmalloc(sizeof(*s), GFP_KERNEL);
+ struct selector *s = kmalloc_obj(*s, GFP_KERNEL);
if (s) {
INIT_LIST_HEAD(&s->valid_paths);
@@ -144,7 +144,7 @@ static int rr_add_path(struct path_selector *ps, struct dm_path *path,
}
/* allocate the path */
- pi = kmalloc(sizeof(*pi), GFP_KERNEL);
+ pi = kmalloc_obj(*pi, GFP_KERNEL);
if (!pi) {
*error = "round-robin ps: Error allocating path context";
return -ENOMEM;
diff --git a/drivers/md/dm-ps-service-time.c b/drivers/md/dm-ps-service-time.c
index 0543fe7969c4..dc119955fadd 100644
--- a/drivers/md/dm-ps-service-time.c
+++ b/drivers/md/dm-ps-service-time.c
@@ -38,7 +38,7 @@ struct path_info {
static struct selector *alloc_selector(void)
{
- struct selector *s = kmalloc(sizeof(*s), GFP_KERNEL);
+ struct selector *s = kmalloc_obj(*s, GFP_KERNEL);
if (s) {
INIT_LIST_HEAD(&s->valid_paths);
@@ -153,7 +153,7 @@ static int st_add_path(struct path_selector *ps, struct dm_path *path,
}
/* allocate the path */
- pi = kmalloc(sizeof(*pi), GFP_KERNEL);
+ pi = kmalloc_obj(*pi, GFP_KERNEL);
if (!pi) {
*error = "service-time ps: Error allocating path context";
return -ENOMEM;
diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c
index 4bacdc499984..939d403fda30 100644
--- a/drivers/md/dm-raid.c
+++ b/drivers/md/dm-raid.c
@@ -744,7 +744,7 @@ static struct raid_set *raid_set_alloc(struct dm_target *ti, struct raid_type *r
return ERR_PTR(-EINVAL);
}
- rs = kzalloc(struct_size(rs, dev, raid_devs), GFP_KERNEL);
+ rs = kzalloc_flex(*rs, dev, raid_devs, GFP_KERNEL);
if (!rs) {
ti->error = "Cannot allocate raid context";
return ERR_PTR(-ENOMEM);
diff --git a/drivers/md/dm-raid1.c b/drivers/md/dm-raid1.c
index 943c0c6b2087..9fb2182ef287 100644
--- a/drivers/md/dm-raid1.c
+++ b/drivers/md/dm-raid1.c
@@ -890,7 +890,7 @@ static struct mirror_set *alloc_context(unsigned int nr_mirrors,
struct dm_dirty_log *dl)
{
struct mirror_set *ms =
- kzalloc(struct_size(ms, mirror, nr_mirrors), GFP_KERNEL);
+ kzalloc_flex(*ms, mirror, nr_mirrors, GFP_KERNEL);
if (!ms) {
ti->error = "Cannot allocate mirror context";
diff --git a/drivers/md/dm-region-hash.c b/drivers/md/dm-region-hash.c
index e9b47b659976..a3489965103c 100644
--- a/drivers/md/dm-region-hash.c
+++ b/drivers/md/dm-region-hash.c
@@ -184,7 +184,7 @@ struct dm_region_hash *dm_region_hash_create(
;
nr_buckets >>= 1;
- rh = kzalloc(sizeof(*rh), GFP_KERNEL);
+ rh = kzalloc_obj(*rh, GFP_KERNEL);
if (!rh) {
DMERR("unable to allocate region hash memory");
return ERR_PTR(-ENOMEM);
@@ -294,7 +294,7 @@ static struct dm_region *__rh_alloc(struct dm_region_hash *rh, region_t region)
nreg = mempool_alloc(&rh->region_pool, GFP_ATOMIC);
if (unlikely(!nreg))
- nreg = kmalloc(sizeof(*nreg), GFP_NOIO | __GFP_NOFAIL);
+ nreg = kmalloc_obj(*nreg, GFP_NOIO | __GFP_NOFAIL);
nreg->state = rh->log->type->in_sync(rh->log, region, 1) ?
DM_RH_CLEAN : DM_RH_NOSYNC;
diff --git a/drivers/md/dm-snap-persistent.c b/drivers/md/dm-snap-persistent.c
index 0e13d60bfdd1..c8128af1dcad 100644
--- a/drivers/md/dm-snap-persistent.c
+++ b/drivers/md/dm-snap-persistent.c
@@ -626,8 +626,8 @@ static int persistent_read_metadata(struct dm_exception_store *store,
*/
ps->exceptions_per_area = (ps->store->chunk_size << SECTOR_SHIFT) /
sizeof(struct disk_exception);
- ps->callbacks = kvcalloc(ps->exceptions_per_area,
- sizeof(*ps->callbacks), GFP_KERNEL);
+ ps->callbacks = kvzalloc_objs(*ps->callbacks, ps->exceptions_per_area,
+ GFP_KERNEL);
if (!ps->callbacks)
return -ENOMEM;
@@ -854,7 +854,7 @@ static int persistent_ctr(struct dm_exception_store *store, char *options)
int r;
/* allocate the pstore */
- ps = kzalloc(sizeof(*ps), GFP_KERNEL);
+ ps = kzalloc_obj(*ps, GFP_KERNEL);
if (!ps)
return -ENOMEM;
diff --git a/drivers/md/dm-snap-transient.c b/drivers/md/dm-snap-transient.c
index 1e07a745bedd..b7b449db6c34 100644
--- a/drivers/md/dm-snap-transient.c
+++ b/drivers/md/dm-snap-transient.c
@@ -77,7 +77,7 @@ static int transient_ctr(struct dm_exception_store *store, char *options)
{
struct transient_c *tc;
- tc = kmalloc(sizeof(struct transient_c), GFP_KERNEL);
+ tc = kmalloc_obj(struct transient_c, GFP_KERNEL);
if (!tc)
return -ENOMEM;
diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c
index dbd148967de4..5a77ccd33232 100644
--- a/drivers/md/dm-snap.c
+++ b/drivers/md/dm-snap.c
@@ -354,8 +354,7 @@ static int init_origin_hash(void)
{
int i;
- _origins = kmalloc_array(ORIGIN_HASH_SIZE, sizeof(struct list_head),
- GFP_KERNEL);
+ _origins = kmalloc_objs(struct list_head, ORIGIN_HASH_SIZE, GFP_KERNEL);
if (!_origins) {
DMERR("unable to allocate memory for _origins");
return -ENOMEM;
@@ -363,9 +362,8 @@ static int init_origin_hash(void)
for (i = 0; i < ORIGIN_HASH_SIZE; i++)
INIT_LIST_HEAD(_origins + i);
- _dm_origins = kmalloc_array(ORIGIN_HASH_SIZE,
- sizeof(struct list_head),
- GFP_KERNEL);
+ _dm_origins = kmalloc_objs(struct list_head, ORIGIN_HASH_SIZE,
+ GFP_KERNEL);
if (!_dm_origins) {
DMERR("unable to allocate memory for _dm_origins");
kfree(_origins);
@@ -559,7 +557,7 @@ static int register_snapshot(struct dm_snapshot *snap)
struct block_device *bdev = snap->origin->bdev;
int r = 0;
- new_o = kmalloc(sizeof(*new_o), GFP_KERNEL);
+ new_o = kmalloc_obj(*new_o, GFP_KERNEL);
if (!new_o)
return -ENOMEM;
@@ -666,8 +664,7 @@ static int dm_exception_table_init(struct dm_exception_table *et,
et->hash_shift = hash_shift;
et->hash_mask = size - 1;
- et->table = kvmalloc_array(size, sizeof(struct dm_hlist_head),
- GFP_KERNEL);
+ et->table = kvmalloc_objs(struct dm_hlist_head, size, GFP_KERNEL);
if (!et->table)
return -ENOMEM;
@@ -1252,7 +1249,7 @@ static int snapshot_ctr(struct dm_target *ti, unsigned int argc, char **argv)
origin_mode = BLK_OPEN_WRITE;
}
- s = kzalloc(sizeof(*s), GFP_KERNEL);
+ s = kzalloc_obj(*s, GFP_KERNEL);
if (!s) {
ti->error = "Cannot allocate private snapshot structure";
r = -ENOMEM;
@@ -2626,7 +2623,7 @@ static int origin_ctr(struct dm_target *ti, unsigned int argc, char **argv)
return -EINVAL;
}
- o = kmalloc(sizeof(struct dm_origin), GFP_KERNEL);
+ o = kmalloc_obj(struct dm_origin, GFP_KERNEL);
if (!o) {
ti->error = "Cannot allocate private origin structure";
r = -ENOMEM;
diff --git a/drivers/md/dm-stats.c b/drivers/md/dm-stats.c
index 1e5d988f44da..b26656dea4ec 100644
--- a/drivers/md/dm-stats.c
+++ b/drivers/md/dm-stats.c
@@ -971,9 +971,8 @@ static int parse_histogram(const char *h, unsigned int *n_histogram_entries,
if (*q == ',')
(*n_histogram_entries)++;
- *histogram_boundaries = kmalloc_array(*n_histogram_entries,
- sizeof(unsigned long long),
- GFP_KERNEL);
+ *histogram_boundaries = kmalloc_objs(unsigned long long,
+ *n_histogram_entries, GFP_KERNEL);
if (!*histogram_boundaries)
return -ENOMEM;
diff --git a/drivers/md/dm-stripe.c b/drivers/md/dm-stripe.c
index 20cce876d80c..e06bb1f7518e 100644
--- a/drivers/md/dm-stripe.c
+++ b/drivers/md/dm-stripe.c
@@ -129,7 +129,7 @@ static int stripe_ctr(struct dm_target *ti, unsigned int argc, char **argv)
return -EINVAL;
}
- sc = kmalloc(struct_size(sc, stripe, stripes), GFP_KERNEL);
+ sc = kmalloc_flex(*sc, stripe, stripes, GFP_KERNEL);
if (!sc) {
ti->error = "Memory allocation for striped context failed";
return -ENOMEM;
diff --git a/drivers/md/dm-switch.c b/drivers/md/dm-switch.c
index 50a52ca50b34..00dffd4a9ea8 100644
--- a/drivers/md/dm-switch.c
+++ b/drivers/md/dm-switch.c
@@ -62,7 +62,7 @@ static struct switch_ctx *alloc_switch_ctx(struct dm_target *ti, unsigned int nr
{
struct switch_ctx *sctx;
- sctx = kzalloc(struct_size(sctx, path_list, nr_paths), GFP_KERNEL);
+ sctx = kzalloc_flex(*sctx, path_list, nr_paths, GFP_KERNEL);
if (!sctx)
return NULL;
diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
index 7be1d8dc8bdd..4b4712e54797 100644
--- a/drivers/md/dm-table.c
+++ b/drivers/md/dm-table.c
@@ -133,7 +133,7 @@ int dm_table_create(struct dm_table **result, blk_mode_t mode,
if (num_targets > DM_MAX_TARGETS)
return -EOVERFLOW;
- t = kzalloc(sizeof(*t), GFP_KERNEL);
+ t = kzalloc_obj(*t, GFP_KERNEL);
if (!t)
return -ENOMEM;
@@ -381,7 +381,7 @@ int dm_get_device(struct dm_target *ti, const char *path, blk_mode_t mode,
dd = find_device(&t->devices, dev);
if (!dd) {
- dd = kmalloc(sizeof(*dd), GFP_KERNEL);
+ dd = kmalloc_obj(*dd, GFP_KERNEL);
if (!dd)
return -ENOMEM;
@@ -1391,7 +1391,7 @@ static int dm_table_construct_crypto_profile(struct dm_table *t)
unsigned int i;
bool empty_profile = true;
- dmcp = kmalloc(sizeof(*dmcp), GFP_KERNEL);
+ dmcp = kmalloc_obj(*dmcp, GFP_KERNEL);
if (!dmcp)
return -ENOMEM;
dmcp->md = t->md;
diff --git a/drivers/md/dm-target.c b/drivers/md/dm-target.c
index 1fd41289de36..a138e8a24327 100644
--- a/drivers/md/dm-target.c
+++ b/drivers/md/dm-target.c
@@ -128,7 +128,7 @@ static int io_err_get_args(struct dm_target *tt, unsigned int argc, char **args)
char dummy;
int ret;
- ioec = kmalloc(sizeof(*ioec), GFP_KERNEL);
+ ioec = kmalloc_obj(*ioec, GFP_KERNEL);
if (!ioec) {
tt->error = "Cannot allocate io_err context";
return -ENOMEM;
diff --git a/drivers/md/dm-thin-metadata.c b/drivers/md/dm-thin-metadata.c
index f90679cfec5b..c924ec4d300d 100644
--- a/drivers/md/dm-thin-metadata.c
+++ b/drivers/md/dm-thin-metadata.c
@@ -957,7 +957,7 @@ struct dm_pool_metadata *dm_pool_metadata_open(struct block_device *bdev,
int r;
struct dm_pool_metadata *pmd;
- pmd = kmalloc(sizeof(*pmd), GFP_KERNEL);
+ pmd = kmalloc_obj(*pmd, GFP_KERNEL);
if (!pmd) {
DMERR("could not allocate metadata struct");
return ERR_PTR(-ENOMEM);
@@ -1077,7 +1077,7 @@ static int __open_device(struct dm_pool_metadata *pmd,
details_le.snapshotted_time = cpu_to_le32(pmd->time);
}
- *td = kmalloc(sizeof(**td), GFP_NOIO);
+ *td = kmalloc_obj(**td, GFP_NOIO);
if (!*td)
return -ENOMEM;
diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
index 52ffb495f5a8..492ead2d9356 100644
--- a/drivers/md/dm-thin.c
+++ b/drivers/md/dm-thin.c
@@ -2949,7 +2949,7 @@ static struct pool *pool_create(struct mapped_device *pool_md,
return ERR_CAST(pmd);
}
- pool = kzalloc(sizeof(*pool), GFP_KERNEL);
+ pool = kzalloc_obj(*pool, GFP_KERNEL);
if (!pool) {
*error = "Error allocating memory for pool";
err_p = ERR_PTR(-ENOMEM);
@@ -3354,7 +3354,7 @@ static int pool_ctr(struct dm_target *ti, unsigned int argc, char **argv)
goto out;
}
- pt = kzalloc(sizeof(*pt), GFP_KERNEL);
+ pt = kzalloc_obj(*pt, GFP_KERNEL);
if (!pt) {
r = -ENOMEM;
goto out;
@@ -4193,7 +4193,7 @@ static int thin_ctr(struct dm_target *ti, unsigned int argc, char **argv)
goto out_unlock;
}
- tc = ti->private = kzalloc(sizeof(*tc), GFP_KERNEL);
+ tc = ti->private = kzalloc_obj(*tc, GFP_KERNEL);
if (!tc) {
ti->error = "Out of memory";
r = -ENOMEM;
diff --git a/drivers/md/dm-unstripe.c b/drivers/md/dm-unstripe.c
index 17be48359564..c595d0a138fc 100644
--- a/drivers/md/dm-unstripe.c
+++ b/drivers/md/dm-unstripe.c
@@ -48,7 +48,7 @@ static int unstripe_ctr(struct dm_target *ti, unsigned int argc, char **argv)
return -EINVAL;
}
- uc = kzalloc(sizeof(*uc), GFP_KERNEL);
+ uc = kzalloc_obj(*uc, GFP_KERNEL);
if (!uc) {
ti->error = "Memory allocation for unstriped context failed";
return -ENOMEM;
diff --git a/drivers/md/dm-verity-fec.c b/drivers/md/dm-verity-fec.c
index 7583607a8aa6..08bb75f00891 100644
--- a/drivers/md/dm-verity-fec.c
+++ b/drivers/md/dm-verity-fec.c
@@ -607,7 +607,7 @@ int verity_fec_ctr_alloc(struct dm_verity *v)
{
struct dm_verity_fec *f;
- f = kzalloc(sizeof(struct dm_verity_fec), GFP_KERNEL);
+ f = kzalloc_obj(struct dm_verity_fec, GFP_KERNEL);
if (!f) {
v->ti->error = "Cannot allocate FEC structure";
return -ENOMEM;
diff --git a/drivers/md/dm-verity-target.c b/drivers/md/dm-verity-target.c
index 8089cb74b75d..9dd0c195091f 100644
--- a/drivers/md/dm-verity-target.c
+++ b/drivers/md/dm-verity-target.c
@@ -764,8 +764,8 @@ static void verity_submit_prefetch(struct dm_verity *v, struct dm_verity_io *io,
return;
}
- pw = kmalloc(sizeof(struct dm_verity_prefetch_work),
- GFP_NOIO | __GFP_NORETRY | __GFP_NOMEMALLOC | __GFP_NOWARN);
+ pw = kmalloc_obj(struct dm_verity_prefetch_work,
+ GFP_NOIO | __GFP_NORETRY | __GFP_NOMEMALLOC | __GFP_NOWARN);
if (!pw)
return;
@@ -1369,7 +1369,7 @@ static int verity_setup_salt_and_hashstate(struct dm_verity *v, const char *arg)
if (likely(v->use_sha256_lib)) {
/* Implies version 1: salt at beginning */
v->initial_hashstate.sha256 =
- kmalloc(sizeof(struct sha256_ctx), GFP_KERNEL);
+ kmalloc_obj(struct sha256_ctx, GFP_KERNEL);
if (!v->initial_hashstate.sha256) {
ti->error = "Cannot allocate initial hash state";
return -ENOMEM;
@@ -1430,7 +1430,7 @@ static int verity_ctr(struct dm_target *ti, unsigned int argc, char **argv)
char dummy;
char *root_hash_digest_to_validate;
- v = kzalloc(sizeof(struct dm_verity), GFP_KERNEL);
+ v = kzalloc_obj(struct dm_verity, GFP_KERNEL);
if (!v) {
ti->error = "Cannot allocate verity structure";
return -ENOMEM;
diff --git a/drivers/md/dm-writecache.c b/drivers/md/dm-writecache.c
index af54e289bceb..bca442478a8d 100644
--- a/drivers/md/dm-writecache.c
+++ b/drivers/md/dm-writecache.c
@@ -1848,9 +1848,8 @@ static void __writecache_writeback_pmem(struct dm_writecache *wc, struct writeba
bio->bi_iter.bi_sector = read_original_sector(wc, e);
if (unlikely(max_pages > WB_LIST_INLINE))
- wb->wc_list = kmalloc_array(max_pages, sizeof(struct wc_entry *),
- GFP_NOIO | __GFP_NORETRY |
- __GFP_NOMEMALLOC | __GFP_NOWARN);
+ wb->wc_list = kmalloc_objs(struct wc_entry *, max_pages,
+ GFP_NOIO | __GFP_NORETRY | __GFP_NOMEMALLOC | __GFP_NOWARN);
if (likely(max_pages <= WB_LIST_INLINE) || unlikely(!wb->wc_list)) {
wb->wc_list = wb->wc_list_inline;
@@ -2246,7 +2245,7 @@ static int writecache_ctr(struct dm_target *ti, unsigned int argc, char **argv)
as.argc = argc;
as.argv = argv;
- wc = kzalloc(sizeof(struct dm_writecache), GFP_KERNEL);
+ wc = kzalloc_obj(struct dm_writecache, GFP_KERNEL);
if (!wc) {
ti->error = "Cannot allocate writecache structure";
r = -ENOMEM;
diff --git a/drivers/md/dm-zoned-metadata.c b/drivers/md/dm-zoned-metadata.c
index 83fcd7b31ed9..b9a473ffdb70 100644
--- a/drivers/md/dm-zoned-metadata.c
+++ b/drivers/md/dm-zoned-metadata.c
@@ -303,7 +303,7 @@ static struct dm_zone *dmz_get(struct dmz_metadata *zmd, unsigned int zone_id)
static struct dm_zone *dmz_insert(struct dmz_metadata *zmd,
unsigned int zone_id, struct dmz_dev *dev)
{
- struct dm_zone *zone = kzalloc(sizeof(struct dm_zone), GFP_KERNEL);
+ struct dm_zone *zone = kzalloc_obj(struct dm_zone, GFP_KERNEL);
if (!zone)
return ERR_PTR(-ENOMEM);
@@ -419,7 +419,7 @@ static struct dmz_mblock *dmz_alloc_mblock(struct dmz_metadata *zmd,
}
/* Allocate a new block */
- mblk = kmalloc(sizeof(struct dmz_mblock), GFP_NOIO);
+ mblk = kmalloc_obj(struct dmz_mblock, GFP_NOIO);
if (!mblk)
return NULL;
@@ -1311,7 +1311,7 @@ static int dmz_load_sb(struct dmz_metadata *zmd)
int i;
struct dmz_sb *sb;
- sb = kzalloc(sizeof(struct dmz_sb), GFP_KERNEL);
+ sb = kzalloc_obj(struct dmz_sb, GFP_KERNEL);
if (!sb)
return -ENOMEM;
for (i = 1; i < zmd->nr_devs; i++) {
@@ -1686,8 +1686,8 @@ static int dmz_load_mapping(struct dmz_metadata *zmd)
unsigned int bzone_id;
/* Metadata block array for the chunk mapping table */
- zmd->map_mblk = kcalloc(zmd->nr_map_blocks,
- sizeof(struct dmz_mblock *), GFP_KERNEL);
+ zmd->map_mblk = kzalloc_objs(struct dmz_mblock *, zmd->nr_map_blocks,
+ GFP_KERNEL);
if (!zmd->map_mblk)
return -ENOMEM;
@@ -2868,7 +2868,7 @@ int dmz_ctr_metadata(struct dmz_dev *dev, int num_dev,
struct dm_zone *zone;
int ret;
- zmd = kzalloc(sizeof(struct dmz_metadata), GFP_KERNEL);
+ zmd = kzalloc_obj(struct dmz_metadata, GFP_KERNEL);
if (!zmd)
return -ENOMEM;
diff --git a/drivers/md/dm-zoned-reclaim.c b/drivers/md/dm-zoned-reclaim.c
index 76e2c6868548..8598cc9eb40f 100644
--- a/drivers/md/dm-zoned-reclaim.c
+++ b/drivers/md/dm-zoned-reclaim.c
@@ -556,7 +556,7 @@ int dmz_ctr_reclaim(struct dmz_metadata *zmd,
struct dmz_reclaim *zrc;
int ret;
- zrc = kzalloc(sizeof(struct dmz_reclaim), GFP_KERNEL);
+ zrc = kzalloc_obj(struct dmz_reclaim, GFP_KERNEL);
if (!zrc)
return -ENOMEM;
diff --git a/drivers/md/dm-zoned-target.c b/drivers/md/dm-zoned-target.c
index 9da329078ea4..0e6ddfb96e03 100644
--- a/drivers/md/dm-zoned-target.c
+++ b/drivers/md/dm-zoned-target.c
@@ -545,7 +545,7 @@ static int dmz_queue_chunk_work(struct dmz_target *dmz, struct bio *bio)
dmz_get_chunk_work(cw);
} else {
/* Create a new chunk work */
- cw = kmalloc(sizeof(struct dm_chunk_work), GFP_NOIO);
+ cw = kmalloc_obj(struct dm_chunk_work, GFP_NOIO);
if (unlikely(!cw)) {
ret = -ENOMEM;
goto out;
@@ -838,18 +838,18 @@ static int dmz_ctr(struct dm_target *ti, unsigned int argc, char **argv)
}
/* Allocate and initialize the target descriptor */
- dmz = kzalloc(sizeof(struct dmz_target), GFP_KERNEL);
+ dmz = kzalloc_obj(struct dmz_target, GFP_KERNEL);
if (!dmz) {
ti->error = "Unable to allocate the zoned target descriptor";
return -ENOMEM;
}
- dmz->dev = kcalloc(argc, sizeof(struct dmz_dev), GFP_KERNEL);
+ dmz->dev = kzalloc_objs(struct dmz_dev, argc, GFP_KERNEL);
if (!dmz->dev) {
ti->error = "Unable to allocate the zoned device descriptors";
kfree(dmz);
return -ENOMEM;
}
- dmz->ddev = kcalloc(argc, sizeof(struct dm_dev *), GFP_KERNEL);
+ dmz->ddev = kzalloc_objs(struct dm_dev *, argc, GFP_KERNEL);
if (!dmz->ddev) {
ti->error = "Unable to allocate the dm device descriptors";
ret = -ENOMEM;
diff --git a/drivers/md/md-bitmap.c b/drivers/md/md-bitmap.c
index 1d4a050dab3a..ca833f147c6a 100644
--- a/drivers/md/md-bitmap.c
+++ b/drivers/md/md-bitmap.c
@@ -1025,8 +1025,7 @@ static int md_bitmap_storage_alloc(struct bitmap_storage *store,
num_pages = DIV_ROUND_UP(bytes, PAGE_SIZE);
offset = slot_number * num_pages;
- store->filemap = kmalloc_array(num_pages, sizeof(struct page *),
- GFP_KERNEL);
+ store->filemap = kmalloc_objs(struct page *, num_pages, GFP_KERNEL);
if (!store->filemap)
return -ENOMEM;
@@ -2121,7 +2120,7 @@ static struct bitmap *__bitmap_create(struct mddev *mddev, int slot)
return ERR_PTR(-EBUSY);
}
- bitmap = kzalloc(sizeof(*bitmap), GFP_KERNEL);
+ bitmap = kzalloc_obj(*bitmap, GFP_KERNEL);
if (!bitmap)
return ERR_PTR(-ENOMEM);
@@ -2436,7 +2435,7 @@ static int __bitmap_resize(struct bitmap *bitmap, sector_t blocks,
pages = DIV_ROUND_UP(chunks, PAGE_COUNTER_RATIO);
- new_bp = kcalloc(pages, sizeof(*new_bp), GFP_KERNEL);
+ new_bp = kzalloc_objs(*new_bp, pages, GFP_KERNEL);
ret = -ENOMEM;
if (!new_bp) {
md_bitmap_file_unmap(&store);
diff --git a/drivers/md/md-cluster.c b/drivers/md/md-cluster.c
index 896279988dfd..c588c972ad54 100644
--- a/drivers/md/md-cluster.c
+++ b/drivers/md/md-cluster.c
@@ -196,7 +196,7 @@ static struct dlm_lock_resource *lockres_init(struct mddev *mddev,
int ret, namelen;
struct md_cluster_info *cinfo = mddev->cluster_info;
- res = kzalloc(sizeof(struct dlm_lock_resource), GFP_KERNEL);
+ res = kzalloc_obj(struct dlm_lock_resource, GFP_KERNEL);
if (!res)
return NULL;
init_waitqueue_head(&res->sync_locking);
@@ -886,7 +886,7 @@ static int join(struct mddev *mddev, int nodes)
int ret, ops_rv;
char str[64];
- cinfo = kzalloc(sizeof(struct md_cluster_info), GFP_KERNEL);
+ cinfo = kzalloc_obj(struct md_cluster_info, GFP_KERNEL);
if (!cinfo)
return -ENOMEM;
@@ -1543,8 +1543,8 @@ static int lock_all_bitmaps(struct mddev *mddev)
struct md_cluster_info *cinfo = mddev->cluster_info;
cinfo->other_bitmap_lockres =
- kcalloc(mddev->bitmap_info.nodes - 1,
- sizeof(struct dlm_lock_resource *), GFP_KERNEL);
+ kzalloc_objs(struct dlm_lock_resource *,
+ mddev->bitmap_info.nodes - 1, GFP_KERNEL);
if (!cinfo->other_bitmap_lockres) {
pr_err("md: can't alloc mem for other bitmap locks\n");
return 0;
diff --git a/drivers/md/md-linear.c b/drivers/md/md-linear.c
index 8d7b82c4a723..beeb88274da4 100644
--- a/drivers/md/md-linear.c
+++ b/drivers/md/md-linear.c
@@ -92,7 +92,7 @@ static struct linear_conf *linear_conf(struct mddev *mddev, int raid_disks)
int cnt;
int i;
- conf = kzalloc(struct_size(conf, disks, raid_disks), GFP_KERNEL);
+ conf = kzalloc_flex(*conf, disks, raid_disks, GFP_KERNEL);
if (!conf)
return ERR_PTR(-ENOMEM);
diff --git a/drivers/md/md-llbitmap.c b/drivers/md/md-llbitmap.c
index cd713a7dc270..e8d7af0c665a 100644
--- a/drivers/md/md-llbitmap.c
+++ b/drivers/md/md-llbitmap.c
@@ -982,7 +982,7 @@ static int llbitmap_create(struct mddev *mddev)
if (ret)
return ret;
- llbitmap = kzalloc(sizeof(*llbitmap), GFP_KERNEL);
+ llbitmap = kzalloc_obj(*llbitmap, GFP_KERNEL);
if (!llbitmap)
return -ENOMEM;
diff --git a/drivers/md/md.c b/drivers/md/md.c
index 72a1c7267851..b7ac2440fbbb 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -853,7 +853,7 @@ static struct mddev *mddev_alloc(dev_t unit)
if (unit && MAJOR(unit) != MD_MAJOR)
unit &= ~((1 << MdpMinorShift) - 1);
- new = kzalloc(sizeof(*new), GFP_KERNEL);
+ new = kzalloc_obj(*new, GFP_KERNEL);
if (!new)
return ERR_PTR(-ENOMEM);
@@ -1222,8 +1222,8 @@ static int md_sb_equal(mdp_super_t *sb1, mdp_super_t *sb2)
int ret;
mdp_super_t *tmp1, *tmp2;
- tmp1 = kmalloc(sizeof(*tmp1),GFP_KERNEL);
- tmp2 = kmalloc(sizeof(*tmp2),GFP_KERNEL);
+ tmp1 = kmalloc_obj(*tmp1, GFP_KERNEL);
+ tmp2 = kmalloc_obj(*tmp2, GFP_KERNEL);
if (!tmp1 || !tmp2) {
ret = 0;
@@ -3817,7 +3817,7 @@ static struct md_rdev *md_import_device(dev_t newdev, int super_format, int supe
sector_t size;
int err;
- rdev = kzalloc(sizeof(*rdev), GFP_KERNEL);
+ rdev = kzalloc_obj(*rdev, GFP_KERNEL);
if (!rdev)
return ERR_PTR(-ENOMEM);
@@ -7238,7 +7238,7 @@ static int get_bitmap_file(struct mddev *mddev, void __user * arg)
char *ptr;
int err;
- file = kzalloc(sizeof(*file), GFP_NOIO);
+ file = kzalloc_obj(*file, GFP_NOIO);
if (!file)
return -ENOMEM;
@@ -8541,7 +8541,7 @@ struct md_thread *md_register_thread(void (*run) (struct md_thread *),
{
struct md_thread *thread;
- thread = kzalloc(sizeof(struct md_thread), GFP_KERNEL);
+ thread = kzalloc_obj(struct md_thread, GFP_KERNEL);
if (!thread)
return NULL;
@@ -10749,7 +10749,7 @@ void md_autodetect_dev(dev_t dev)
{
struct detected_devices_node *node_detected_dev;
- node_detected_dev = kzalloc(sizeof(*node_detected_dev), GFP_KERNEL);
+ node_detected_dev = kzalloc_obj(*node_detected_dev, GFP_KERNEL);
if (node_detected_dev) {
node_detected_dev->dev = dev;
mutex_lock(&detected_devices_mutex);
diff --git a/drivers/md/persistent-data/dm-block-manager.c b/drivers/md/persistent-data/dm-block-manager.c
index 1ef71e5fcde7..43bd64b77a7d 100644
--- a/drivers/md/persistent-data/dm-block-manager.c
+++ b/drivers/md/persistent-data/dm-block-manager.c
@@ -388,7 +388,7 @@ struct dm_block_manager *dm_block_manager_create(struct block_device *bdev,
int r;
struct dm_block_manager *bm;
- bm = kmalloc(sizeof(*bm), GFP_KERNEL);
+ bm = kmalloc_obj(*bm, GFP_KERNEL);
if (!bm) {
r = -ENOMEM;
goto bad;
diff --git a/drivers/md/persistent-data/dm-btree.c b/drivers/md/persistent-data/dm-btree.c
index 0c7a2e8d1846..dd02eee4a23c 100644
--- a/drivers/md/persistent-data/dm-btree.c
+++ b/drivers/md/persistent-data/dm-btree.c
@@ -280,7 +280,7 @@ int dm_btree_del(struct dm_btree_info *info, dm_block_t root)
* considered an FS op. We can't recurse back into the FS, so we
* allocate GFP_NOFS.
*/
- s = kmalloc(sizeof(*s), GFP_NOFS);
+ s = kmalloc_obj(*s, GFP_NOFS);
if (!s)
return -ENOMEM;
s->info = info;
diff --git a/drivers/md/persistent-data/dm-space-map-disk.c b/drivers/md/persistent-data/dm-space-map-disk.c
index f4241f54e20e..1d3cfc87701a 100644
--- a/drivers/md/persistent-data/dm-space-map-disk.c
+++ b/drivers/md/persistent-data/dm-space-map-disk.c
@@ -220,7 +220,7 @@ struct dm_space_map *dm_sm_disk_create(struct dm_transaction_manager *tm,
int r;
struct sm_disk *smd;
- smd = kmalloc(sizeof(*smd), GFP_KERNEL);
+ smd = kmalloc_obj(*smd, GFP_KERNEL);
if (!smd)
return ERR_PTR(-ENOMEM);
@@ -254,7 +254,7 @@ struct dm_space_map *dm_sm_disk_open(struct dm_transaction_manager *tm,
int r;
struct sm_disk *smd;
- smd = kmalloc(sizeof(*smd), GFP_KERNEL);
+ smd = kmalloc_obj(*smd, GFP_KERNEL);
if (!smd)
return ERR_PTR(-ENOMEM);
diff --git a/drivers/md/persistent-data/dm-space-map-metadata.c b/drivers/md/persistent-data/dm-space-map-metadata.c
index d48c4fafc779..3c82a715ceed 100644
--- a/drivers/md/persistent-data/dm-space-map-metadata.c
+++ b/drivers/md/persistent-data/dm-space-map-metadata.c
@@ -772,7 +772,7 @@ struct dm_space_map *dm_sm_metadata_init(void)
{
struct sm_metadata *smm;
- smm = kvmalloc(sizeof(*smm), GFP_KERNEL);
+ smm = kvmalloc_obj(*smm, GFP_KERNEL);
if (!smm)
return ERR_PTR(-ENOMEM);
diff --git a/drivers/md/persistent-data/dm-transaction-manager.c b/drivers/md/persistent-data/dm-transaction-manager.c
index 98c745d90f48..1f50f50665ef 100644
--- a/drivers/md/persistent-data/dm-transaction-manager.c
+++ b/drivers/md/persistent-data/dm-transaction-manager.c
@@ -137,7 +137,7 @@ static void insert_shadow(struct dm_transaction_manager *tm, dm_block_t b)
unsigned int bucket;
struct shadow_info *si;
- si = kmalloc(sizeof(*si), GFP_NOIO);
+ si = kmalloc_obj(*si, GFP_NOIO);
if (si) {
struct rb_node **node, *parent;
si->where = b;
@@ -185,7 +185,7 @@ static struct dm_transaction_manager *dm_tm_create(struct dm_block_manager *bm,
unsigned int i;
struct dm_transaction_manager *tm;
- tm = kmalloc(sizeof(*tm), GFP_KERNEL);
+ tm = kmalloc_obj(*tm, GFP_KERNEL);
if (!tm)
return ERR_PTR(-ENOMEM);
@@ -207,7 +207,7 @@ struct dm_transaction_manager *dm_tm_create_non_blocking_clone(struct dm_transac
{
struct dm_transaction_manager *tm;
- tm = kmalloc(sizeof(*tm), GFP_KERNEL);
+ tm = kmalloc_obj(*tm, GFP_KERNEL);
if (tm) {
tm->is_clone = 1;
tm->real = real;
diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c
index d83b2b1c0049..f316267a2c02 100644
--- a/drivers/md/raid0.c
+++ b/drivers/md/raid0.c
@@ -69,7 +69,7 @@ static int create_strip_zones(struct mddev *mddev, struct r0conf **private_conf)
struct md_rdev *smallest, *rdev1, *rdev2, *rdev, **dev;
struct strip_zone *zone;
int cnt;
- struct r0conf *conf = kzalloc(sizeof(*conf), GFP_KERNEL);
+ struct r0conf *conf = kzalloc_obj(*conf, GFP_KERNEL);
unsigned int blksize = 512;
if (!mddev_is_dm(mddev))
@@ -143,9 +143,8 @@ static int create_strip_zones(struct mddev *mddev, struct r0conf **private_conf)
}
err = -ENOMEM;
- conf->strip_zone = kcalloc(conf->nr_strip_zones,
- sizeof(struct strip_zone),
- GFP_KERNEL);
+ conf->strip_zone = kzalloc_objs(struct strip_zone, conf->nr_strip_zones,
+ GFP_KERNEL);
if (!conf->strip_zone)
goto abort;
conf->devlist = kzalloc(array3_size(sizeof(struct md_rdev *),
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index 867db18bc3ba..d5fd7841dd9f 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -155,8 +155,7 @@ static void * r1buf_pool_alloc(gfp_t gfp_flags, void *data)
if (!r1_bio)
return NULL;
- rps = kmalloc_array(conf->raid_disks * 2, sizeof(struct resync_pages),
- gfp_flags);
+ rps = kmalloc_objs(struct resync_pages, conf->raid_disks * 2, gfp_flags);
if (!rps)
goto out_free_r1bio;
@@ -3070,27 +3069,25 @@ static struct r1conf *setup_conf(struct mddev *mddev)
size_t r1bio_size;
int err = -ENOMEM;
- conf = kzalloc(sizeof(struct r1conf), GFP_KERNEL);
+ conf = kzalloc_obj(struct r1conf, GFP_KERNEL);
if (!conf)
goto abort;
- conf->nr_pending = kcalloc(BARRIER_BUCKETS_NR,
- sizeof(atomic_t), GFP_KERNEL);
+ conf->nr_pending = kzalloc_objs(atomic_t, BARRIER_BUCKETS_NR,
+ GFP_KERNEL);
if (!conf->nr_pending)
goto abort;
- conf->nr_waiting = kcalloc(BARRIER_BUCKETS_NR,
- sizeof(atomic_t), GFP_KERNEL);
+ conf->nr_waiting = kzalloc_objs(atomic_t, BARRIER_BUCKETS_NR,
+ GFP_KERNEL);
if (!conf->nr_waiting)
goto abort;
- conf->nr_queued = kcalloc(BARRIER_BUCKETS_NR,
- sizeof(atomic_t), GFP_KERNEL);
+ conf->nr_queued = kzalloc_objs(atomic_t, BARRIER_BUCKETS_NR, GFP_KERNEL);
if (!conf->nr_queued)
goto abort;
- conf->barrier = kcalloc(BARRIER_BUCKETS_NR,
- sizeof(atomic_t), GFP_KERNEL);
+ conf->barrier = kzalloc_objs(atomic_t, BARRIER_BUCKETS_NR, GFP_KERNEL);
if (!conf->barrier)
goto abort;
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
index 9debb20cf129..bdd3a7feaea7 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -152,7 +152,7 @@ static void * r10buf_pool_alloc(gfp_t gfp_flags, void *data)
nalloc_rp = nalloc;
else
nalloc_rp = nalloc * 2;
- rps = kmalloc_array(nalloc_rp, sizeof(struct resync_pages), gfp_flags);
+ rps = kmalloc_objs(struct resync_pages, nalloc_rp, gfp_flags);
if (!rps)
goto out_free_r10bio;
@@ -3852,14 +3852,14 @@ static struct r10conf *setup_conf(struct mddev *mddev)
}
err = -ENOMEM;
- conf = kzalloc(sizeof(struct r10conf), GFP_KERNEL);
+ conf = kzalloc_obj(struct r10conf, GFP_KERNEL);
if (!conf)
goto out;
/* FIXME calc properly */
- conf->mirrors = kcalloc(mddev->raid_disks + max(0, -mddev->delta_disks),
- sizeof(struct raid10_info),
- GFP_KERNEL);
+ conf->mirrors = kzalloc_objs(struct raid10_info,
+ mddev->raid_disks + max(0, -mddev->delta_disks),
+ GFP_KERNEL);
if (!conf->mirrors)
goto out;
@@ -4281,9 +4281,9 @@ static int raid10_check_reshape(struct mddev *mddev)
if (mddev->delta_disks > 0) {
/* allocate new 'mirrors' list */
conf->mirrors_new =
- kcalloc(mddev->raid_disks + mddev->delta_disks,
- sizeof(struct raid10_info),
- GFP_KERNEL);
+ kzalloc_objs(struct raid10_info,
+ mddev->raid_disks + mddev->delta_disks,
+ GFP_KERNEL);
if (!conf->mirrors_new)
return -ENOMEM;
}
@@ -4918,7 +4918,7 @@ static int handle_reshape_read_error(struct mddev *mddev,
int idx = 0;
struct page **pages;
- r10b = kmalloc(struct_size(r10b, devs, conf->copies), GFP_NOIO);
+ r10b = kmalloc_flex(*r10b, devs, conf->copies, GFP_NOIO);
if (!r10b) {
set_bit(MD_RECOVERY_INTR, &mddev->recovery);
return -ENOMEM;
diff --git a/drivers/md/raid5-cache.c b/drivers/md/raid5-cache.c
index e29e69335c69..3ae22f6aacda 100644
--- a/drivers/md/raid5-cache.c
+++ b/drivers/md/raid5-cache.c
@@ -2447,7 +2447,7 @@ static int r5l_recovery_log(struct r5l_log *log)
int ret;
sector_t pos;
- ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+ ctx = kzalloc_obj(*ctx, GFP_KERNEL);
if (!ctx)
return -ENOMEM;
@@ -3071,7 +3071,7 @@ int r5l_init_log(struct r5conf *conf, struct md_rdev *rdev)
return -EINVAL;
}
- log = kzalloc(sizeof(*log), GFP_KERNEL);
+ log = kzalloc_obj(*log, GFP_KERNEL);
if (!log)
return -ENOMEM;
log->rdev = rdev;
diff --git a/drivers/md/raid5-ppl.c b/drivers/md/raid5-ppl.c
index 56b234683ee6..9dfa07ed723f 100644
--- a/drivers/md/raid5-ppl.c
+++ b/drivers/md/raid5-ppl.c
@@ -1352,7 +1352,7 @@ int ppl_init_log(struct r5conf *conf)
return -EINVAL;
}
- ppl_conf = kzalloc(sizeof(struct ppl_conf), GFP_KERNEL);
+ ppl_conf = kzalloc_obj(struct ppl_conf, GFP_KERNEL);
if (!ppl_conf)
return -ENOMEM;
@@ -1378,8 +1378,8 @@ int ppl_init_log(struct r5conf *conf)
goto err;
ppl_conf->count = conf->raid_disks;
- ppl_conf->child_logs = kcalloc(ppl_conf->count, sizeof(struct ppl_log),
- GFP_KERNEL);
+ ppl_conf->child_logs = kzalloc_objs(struct ppl_log, ppl_conf->count,
+ GFP_KERNEL);
if (!ppl_conf->child_logs) {
ret = -ENOMEM;
goto err;
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index 8854e024f311..ba8381cbb2f1 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -513,7 +513,7 @@ init_stripe_shared_pages(struct stripe_head *sh, struct r5conf *conf, int disks)
cnt = PAGE_SIZE / conf->stripe_size;
nr_pages = (disks + cnt - 1) / cnt;
- sh->pages = kcalloc(nr_pages, sizeof(struct page *), GFP_KERNEL);
+ sh->pages = kzalloc_objs(struct page *, nr_pages, GFP_KERNEL);
if (!sh->pages)
return -ENOMEM;
sh->nr_pages = nr_pages;
@@ -2610,7 +2610,7 @@ static int resize_stripes(struct r5conf *conf, int newsize)
* is completely stalled, so now is a good time to resize
* conf->disks and the scribble region
*/
- ndisks = kcalloc(newsize, sizeof(struct disk_info), GFP_NOIO);
+ ndisks = kzalloc_objs(struct disk_info, newsize, GFP_NOIO);
if (ndisks) {
for (i = 0; i < conf->pool_size; i++)
ndisks[i] = conf->disks[i];
@@ -7267,8 +7267,8 @@ static int alloc_thread_groups(struct r5conf *conf, int cnt, int *group_cnt,
*group_cnt = num_possible_nodes();
size = sizeof(struct r5worker) * cnt;
workers = kcalloc(size, *group_cnt, GFP_NOIO);
- *worker_groups = kcalloc(*group_cnt, sizeof(struct r5worker_group),
- GFP_NOIO);
+ *worker_groups = kzalloc_objs(struct r5worker_group, *group_cnt,
+ GFP_NOIO);
if (!*worker_groups || !workers) {
kfree(workers);
kfree(*worker_groups);
@@ -7497,7 +7497,7 @@ static struct r5conf *setup_conf(struct mddev *mddev)
return ERR_PTR(-EINVAL);
}
- conf = kzalloc(sizeof(struct r5conf), GFP_KERNEL);
+ conf = kzalloc_obj(struct r5conf, GFP_KERNEL);
if (conf == NULL)
goto abort;
@@ -7508,9 +7508,8 @@ static struct r5conf *setup_conf(struct mddev *mddev)
#endif
INIT_LIST_HEAD(&conf->free_list);
INIT_LIST_HEAD(&conf->pending_list);
- conf->pending_data = kcalloc(PENDING_IO_MAX,
- sizeof(struct r5pending_data),
- GFP_KERNEL);
+ conf->pending_data = kzalloc_objs(struct r5pending_data, PENDING_IO_MAX,
+ GFP_KERNEL);
if (!conf->pending_data)
goto abort;
for (i = 0; i < PENDING_IO_MAX; i++)
@@ -7557,8 +7556,7 @@ static struct r5conf *setup_conf(struct mddev *mddev)
conf->previous_raid_disks = mddev->raid_disks - mddev->delta_disks;
max_disks = max(conf->raid_disks, conf->previous_raid_disks);
- conf->disks = kcalloc(max_disks, sizeof(struct disk_info),
- GFP_KERNEL);
+ conf->disks = kzalloc_objs(struct disk_info, max_disks, GFP_KERNEL);
if (!conf->disks)
goto abort;