dm: wait until embedded kobject is released before destroying a device
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.
The dm_kobject_release method doesn't free the kobject (which is
embedded in the mapped_device structure). dm_kobject_release just
signals the completion and returns.
This is the sequence of operations:
* when destroying a DM device, call kobject_put from dm_sysfs_exit
* wait until all users stop using the kobject, when it happens the
release method is called
* the release method signals the completion and returns
* the dm_mod unload code that waits on the completion continues
* the dm_mod unload code frees the mapped_device structure that contains
the kobject
Using kobject this way avoids the module unload race that was mentioned
at the beginning of this thread: https://lkml.org/lkml/2014/1/4/83
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com> Cc: stable@vger.kernel.org