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

Commit f4be6b43 authored by NeilBrown's avatar NeilBrown
Browse files

md/raid5: ensure we create a unique name for kmem_cache when mddev has no gendisk



We will shortly allow md devices with no gendisk (they are attached to
a dm-target instead).  That will cause mdname() to return 'mdX'.
There is one place where mdname really needs to be unique: when
creating the name for a slab cache.
So in that case, if there is no gendisk, you the address of the mddev
formatted in HEX to provide a unique name.

Signed-off-by: default avatarNeilBrown <neilb@suse.de>
parent c41d4ac4
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -1337,10 +1337,14 @@ static int grow_stripes(raid5_conf_t *conf, int num)
	struct kmem_cache *sc;
	int devs = max(conf->raid_disks, conf->previous_raid_disks);

	if (conf->mddev->gendisk)
		sprintf(conf->cache_name[0],
			"raid%d-%s", conf->level, mdname(conf->mddev));
	sprintf(conf->cache_name[1],
		"raid%d-%s-alt", conf->level, mdname(conf->mddev));
	else
		sprintf(conf->cache_name[0],
			"raid%d-%p", conf->level, conf->mddev);
	sprintf(conf->cache_name[1], "%s-alt", conf->cache_name[0]);

	conf->active_name = 0;
	sc = kmem_cache_create(conf->cache_name[conf->active_name],
			       sizeof(struct stripe_head)+(devs-1)*sizeof(struct r5dev),
+1 −1
Original line number Diff line number Diff line
@@ -388,7 +388,7 @@ struct raid5_private_data {
	 * two caches.
	 */
	int			active_name;
	char			cache_name[2][20];
	char			cache_name[2][32];
	struct kmem_cache		*slab_cache; /* for allocating stripes */

	int			seq_flush, seq_write;