Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4bed207c authored by Fabian Frederick's avatar Fabian Frederick Committed by Brian Norris
Browse files

mtd: block2mtd: Add mutex_destroy



mutex_destroy added on each device in block2mtd_exit and add_device failure

Signed-off-by: default avatarFabian Frederick <fabf@skynet.be>
Signed-off-by: default avatarBrian Norris <computersforpeace@gmail.com>
parent 6f6b9fee
Loading
Loading
Loading
Loading
+8 −5
Original line number Original line Diff line number Diff line
@@ -240,13 +240,13 @@ static struct block2mtd_dev *add_device(char *devname, int erase_size)


	if (IS_ERR(bdev)) {
	if (IS_ERR(bdev)) {
		pr_err("error: cannot open device %s\n", devname);
		pr_err("error: cannot open device %s\n", devname);
		goto devinit_err;
		goto err_free_block2mtd;
	}
	}
	dev->blkdev = bdev;
	dev->blkdev = bdev;


	if (MAJOR(bdev->bd_dev) == MTD_BLOCK_MAJOR) {
	if (MAJOR(bdev->bd_dev) == MTD_BLOCK_MAJOR) {
		pr_err("attempting to use an MTD device as a block device\n");
		pr_err("attempting to use an MTD device as a block device\n");
		goto devinit_err;
		goto err_free_block2mtd;
	}
	}


	mutex_init(&dev->write_mutex);
	mutex_init(&dev->write_mutex);
@@ -255,7 +255,7 @@ static struct block2mtd_dev *add_device(char *devname, int erase_size)
	/* make the name contain the block device in */
	/* make the name contain the block device in */
	name = kasprintf(GFP_KERNEL, "block2mtd: %s", devname);
	name = kasprintf(GFP_KERNEL, "block2mtd: %s", devname);
	if (!name)
	if (!name)
		goto devinit_err;
		goto err_destroy_mutex;


	dev->mtd.name = name;
	dev->mtd.name = name;


@@ -274,7 +274,7 @@ static struct block2mtd_dev *add_device(char *devname, int erase_size)


	if (mtd_device_register(&dev->mtd, NULL, 0)) {
	if (mtd_device_register(&dev->mtd, NULL, 0)) {
		/* Device didn't get added, so free the entry */
		/* Device didn't get added, so free the entry */
		goto devinit_err;
		goto err_destroy_mutex;
	}
	}
	list_add(&dev->list, &blkmtd_device_list);
	list_add(&dev->list, &blkmtd_device_list);
	pr_info("mtd%d: [%s] erase_size = %dKiB [%d]\n",
	pr_info("mtd%d: [%s] erase_size = %dKiB [%d]\n",
@@ -283,7 +283,9 @@ static struct block2mtd_dev *add_device(char *devname, int erase_size)
		dev->mtd.erasesize >> 10, dev->mtd.erasesize);
		dev->mtd.erasesize >> 10, dev->mtd.erasesize);
	return dev;
	return dev;


devinit_err:
err_destroy_mutex:
	mutex_destroy(&dev->write_mutex);
err_free_block2mtd:
	block2mtd_free_device(dev);
	block2mtd_free_device(dev);
	return NULL;
	return NULL;
}
}
@@ -448,6 +450,7 @@ static void block2mtd_exit(void)
		struct block2mtd_dev *dev = list_entry(pos, typeof(*dev), list);
		struct block2mtd_dev *dev = list_entry(pos, typeof(*dev), list);
		block2mtd_sync(&dev->mtd);
		block2mtd_sync(&dev->mtd);
		mtd_device_unregister(&dev->mtd);
		mtd_device_unregister(&dev->mtd);
		mutex_destroy(&dev->write_mutex);
		pr_info("mtd%d: [%s] removed\n",
		pr_info("mtd%d: [%s] removed\n",
			dev->mtd.index,
			dev->mtd.index,
			dev->mtd.name + strlen("block2mtd: "));
			dev->mtd.name + strlen("block2mtd: "));