[dm-devel] dm: wait until kobject is destroyed
Mike Snitzer
snitzer at redhat.com
Fri Jan 10 21:03:15 UTC 2014
On Thu, Jan 09 2014 at 8:53pm -0500,
Mikulas Patocka <mpatocka at redhat.com> wrote:
> Hi
>
> Here I'm sending the updated kobject patch.
>
> Changes:
> The file was renamed to dm-builtin.c
> A comment with explanation of the race condition added.
>
> Mikulas
>
>
>
> From: Mikulas Patocka <mpatocka at redhat.com>
>
> There may be other parts of the kernel taking reference to the dm kobject.
> We must wait until they drop the references before deallocating the md
> structure.
>
> Signed-off-by: Mikulas Patocka <mpatocka at redhat.com>
> Cc: stable at vger.kernel.org
This header could use some work considering the previous patch is
already staged in linux-dm.git's 'for-next' -- so this patch will build
on that. Would be nice to see some commentary about introducing a
dm-builtin to avoid concerns about dm_kobject_release crash after dm-mod
is unloaded. Also, touch on the role/need of struct dm_kobject_holder?
> Index: linux-3.13-rc7/drivers/md/dm-sysfs.c
> ===================================================================
> --- linux-3.13-rc7.orig/drivers/md/dm-sysfs.c 2014-01-09 20:50:18.000000000 +0100
> +++ linux-3.13-rc7/drivers/md/dm-sysfs.c 2014-01-09 20:50:38.000000000 +0100
> @@ -86,6 +86,7 @@ static const struct sysfs_ops dm_sysfs_o
> static struct kobj_type dm_ktype = {
> .sysfs_ops = &dm_sysfs_ops,
> .default_attrs = dm_attrs,
> + .release = dm_kobject_release,
> };
>
> /*
> @@ -104,5 +105,7 @@ int dm_sysfs_init(struct mapped_device *
> */
> void dm_sysfs_exit(struct mapped_device *md)
> {
> - kobject_put(dm_kobject(md));
> + struct kobject *kobj = dm_kobject(md);
> + kobject_put(kobj);
> + wait_for_completion(dm_get_completion_from_kobject(kobj));
> }
> Index: linux-3.13-rc7/drivers/md/dm.c
> ===================================================================
> --- linux-3.13-rc7.orig/drivers/md/dm.c 2014-01-09 20:50:18.000000000 +0100
> +++ linux-3.13-rc7/drivers/md/dm.c 2014-01-09 20:50:38.000000000 +0100
> @@ -200,8 +200,8 @@ struct mapped_device {
> /* forced geometry settings */
> struct hd_geometry geometry;
>
> - /* sysfs handle */
> - struct kobject kobj;
> + /* kobject and completion */
> + struct dm_kobject_holder h;
>
> /* zero-length flush that will be cloned and submitted to targets */
> struct bio flush_bio;
Could you rename 'h' to 'kobj_holder'?
Also, this patch needs to be rebased ontop of linux-dm.git's 'for-next'
branch.
Mike
More information about the dm-devel
mailing list