Commit e19eaffc authored by Rosen Penev's avatar Rosen Penev Committed by Miquel Raynal
Browse files

mtd: concat: replace alloc + calloc with 1 alloc



A flex array can be used to reduce the allocation to 1.

And actually mtdconcat was using the pointer + 1 trick to point to the
overallocated area. Better alternatives exist.

Signed-off-by: default avatarRosen Penev <rosenp@gmail.com>
Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
parent c685e6e8
Loading
Loading
Loading
Loading
+1 −7
Original line number Diff line number Diff line
@@ -182,18 +182,12 @@ static int mtd_virt_concat_create_item(struct device_node *parts,
	for (i = 1; i < count; i++)
		item->nodes[i] = of_parse_phandle(parts, CONCAT_PROP, (i - 1));

	concat = kzalloc(sizeof(*concat), GFP_KERNEL);
	concat = kzalloc_flex(*concat, subdev, count, GFP_KERNEL);
	if (!concat) {
		kfree(item);
		return -ENOMEM;
	}

	concat->subdev = kcalloc(count, sizeof(*concat->subdev), GFP_KERNEL);
	if (!concat->subdev) {
		kfree(item);
		kfree(concat);
		return -ENOMEM;
	}
	item->concat = concat;

	list_add_tail(&item->head, &concat_node_list);
+1 −4
Original line number Diff line number Diff line
@@ -627,7 +627,6 @@ struct mtd_info *mtd_concat_create(struct mtd_info *subdev[], /* subdevices to c
				   const char *name)
{				/* name for the new device   */
	int i;
	size_t size;
	struct mtd_concat *concat;
	struct mtd_info *subdev_master = NULL;
	uint32_t max_erasesize, curr_erasesize;
@@ -640,15 +639,13 @@ struct mtd_info *mtd_concat_create(struct mtd_info *subdev[], /* subdevices to c
	printk(KERN_NOTICE "into device \"%s\"\n", name);

	/* allocate the device structure */
	size = SIZEOF_STRUCT_MTD_CONCAT(num_devs);
	concat = kzalloc(size, GFP_KERNEL);
	concat = kzalloc_flex(*concat, subdev, num_devs, GFP_KERNEL);
	if (!concat) {
		printk
		    ("memory allocation error while creating concatenated device \"%s\"\n",
		     name);
		return NULL;
	}
	concat->subdev = (struct mtd_info **) (concat + 1);

	/*
	 * Set up the new "super" device's MTD object structure, check for
+1 −1
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@
struct mtd_concat {
	struct mtd_info mtd;
	int num_subdev;
	struct mtd_info **subdev;
	struct mtd_info *subdev[];
};

struct mtd_info *mtd_concat_create(