Skip to content

Commit

Permalink
md/raid5: ensure we create a unique name for kmem_cache when mddev ha…
Browse files Browse the repository at this point in the history
…s 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: NeilBrown <neilb@suse.de>
  • Loading branch information
NeilBrown committed Jul 26, 2010
1 parent c41d4ac commit f4be6b4
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 5 deletions.
12 changes: 8 additions & 4 deletions drivers/md/raid5.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

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));
if (conf->mddev->gendisk)
sprintf(conf->cache_name[0],
"raid%d-%s", 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),
Expand Down
2 changes: 1 addition & 1 deletion drivers/md/raid5.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit f4be6b4

Please sign in to comment.