Message ID | 20220718063410.338626-4-hch@lst.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [01/10] md: fix mddev->kobj lifetime | expand |
On 7/18/22 08:34, Christoph Hellwig wrote: > Ensure that all private data is only freed once all accesses are done. > > Signed-off-by: Christoph Hellwig <hch@lst.de> > --- > drivers/md/md.c | 17 ++++++++++++----- > 1 file changed, 12 insertions(+), 5 deletions(-) > Reviewd-by: Hannes Reinecke <hare@suse.de> Cheers, Hannes
On 2022-07-18 00:34, Christoph Hellwig wrote: > Ensure that all private data is only freed once all accesses are done. > > Signed-off-by: Christoph Hellwig <hch@lst.de> > --- > drivers/md/md.c | 17 ++++++++++++----- > 1 file changed, 12 insertions(+), 5 deletions(-) > > diff --git a/drivers/md/md.c b/drivers/md/md.c > index 64c7c24d267bc..1e658d5060842 100644 > --- a/drivers/md/md.c > +++ b/drivers/md/md.c > @@ -5602,11 +5602,6 @@ static void md_free(struct kobject *ko) > del_gendisk(mddev->gendisk); > blk_cleanup_disk(mddev->gendisk); > } Looks like, with the previous patch, we can now remove the conditional on gendisk. Other than that it looks good: Reviewed-by: Logan Gunthorpe <logang@deltatee.com> Logan
diff --git a/drivers/md/md.c b/drivers/md/md.c index 64c7c24d267bc..1e658d5060842 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -5602,11 +5602,6 @@ static void md_free(struct kobject *ko) del_gendisk(mddev->gendisk); blk_cleanup_disk(mddev->gendisk); } - percpu_ref_exit(&mddev->writes_pending); - - bioset_exit(&mddev->bio_set); - bioset_exit(&mddev->sync_set); - kfree(mddev); } static const struct sysfs_ops md_sysfs_ops = { @@ -7876,6 +7871,17 @@ static unsigned int md_check_events(struct gendisk *disk, unsigned int clearing) return ret; } +static void md_free_disk(struct gendisk *disk) +{ + struct mddev *mddev = disk->private_data; + + percpu_ref_exit(&mddev->writes_pending); + bioset_exit(&mddev->bio_set); + bioset_exit(&mddev->sync_set); + + kfree(mddev); +} + const struct block_device_operations md_fops = { .owner = THIS_MODULE, @@ -7889,6 +7895,7 @@ const struct block_device_operations md_fops = .getgeo = md_getgeo, .check_events = md_check_events, .set_read_only = md_set_read_only, + .free_disk = md_free_disk, }; static int md_thread(void *arg)
Ensure that all private data is only freed once all accesses are done. Signed-off-by: Christoph Hellwig <hch@lst.de> --- drivers/md/md.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-)