Remove bdput calls from raid personalities.
Some of the md personalities currently hold a counted reference
on a bdev. This is not necessary as the main md module will always
hold a counted reference in the rdev.
This patch removes the code to take and drop these unnecessary
references.
}
disk->bdev = rdev->bdev;
- atomic_inc(&rdev->bdev->bd_count);
disk->size = rdev->size;
if (!conf->smallest || (disk->size < conf->smallest->size))
return 0;
out:
- if (conf) {
- for (i = 0; i < MD_SB_DISKS; i++)
- if (conf->disks[i].bdev)
- bdput(conf->disks[i].bdev);
+ if (conf)
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);
disk->number = desc->number;
disk->raid_disk = desc->raid_disk;
disk->bdev = rdev->bdev;
- atomic_inc(&rdev->bdev->bd_count);
disk->operational = 0;
disk->spare = 1;
disk->used_slot = 1;
out_free_conf:
multipath_shrink_mpbh(conf);
- for (i = 0; i < MD_SB_DISKS; i++)
- if (conf->multipaths[i].bdev)
- bdput(conf->multipaths[i].bdev);
kfree(conf);
mddev->private = NULL;
out:
static int multipath_stop (mddev_t *mddev)
{
multipath_conf_t *conf = mddev_to_conf(mddev);
- int i;
md_unregister_thread(conf->thread);
multipath_shrink_mpbh(conf);
- for (i = 0; i < MD_SB_DISKS; i++)
- if (conf->multipaths[i].bdev)
- bdput(conf->multipaths[i].bdev);
kfree(conf);
mddev->private = NULL;
MOD_DEC_USE_COUNT;
disk->number = descriptor->number;
disk->raid_disk = disk_idx;
disk->bdev = rdev->bdev;
- atomic_inc(&rdev->bdev->bd_count);
disk->operational = 0;
disk->write_only = 0;
disk->spare = 0;
disk->number = descriptor->number;
disk->raid_disk = disk_idx;
disk->bdev = rdev->bdev;
- atomic_inc(&rdev->bdev->bd_count);
disk->operational = 1;
disk->write_only = 0;
disk->spare = 0;
disk->number = descriptor->number;
disk->raid_disk = disk_idx;
disk->bdev = rdev->bdev;
- atomic_inc(&rdev->bdev->bd_count);
disk->operational = 0;
disk->write_only = 0;
disk->spare = 1;
out_free_conf:
if (conf->r1bio_pool)
mempool_destroy(conf->r1bio_pool);
- for (i = 0; i < MD_SB_DISKS; i++)
- if (conf->mirrors[i].bdev)
- bdput(conf->mirrors[i].bdev);
kfree(conf);
mddev->private = NULL;
out:
static int stop(mddev_t *mddev)
{
conf_t *conf = mddev_to_conf(mddev);
- int i;
md_unregister_thread(conf->thread);
if (conf->r1bio_pool)
mempool_destroy(conf->r1bio_pool);
- for (i = 0; i < MD_SB_DISKS; i++)
- if (conf->mirrors[i].bdev)
- bdput(conf->mirrors[i].bdev);
kfree(conf);
mddev->private = NULL;
MOD_DEC_USE_COUNT;