dev_info_t *disk = conf->disks + j;
disk->dev = rdev->dev;
+ disk->bdev = rdev->bdev;
+ atomic_inc(&rdev->bdev->bd_count);
disk->size = rdev->size;
disk->offset = curr_offset;
return 0;
out:
- if (conf)
+ if (conf) {
+ for (i = 0; i < MD_SB_DISKS; i++)
+ if (conf->disks[i].bdev)
+ bdput(conf->disks[i].bdev);
kfree(conf);
+ }
MOD_DEC_USE_COUNT;
return 1;
}
static int linear_stop (mddev_t *mddev)
{
linear_conf_t *conf = mddev_to_conf(mddev);
+ int i;
+ for (i = 0; i < MD_SB_DISKS; i++)
+ if (conf->disks[i].bdev)
+ bdput(conf->disks[i].bdev);
kfree(conf->hash_table);
kfree(conf);