]> git.karo-electronics.de Git - karo-tx-linux.git/commit
dm: wait until embedded kobject is released before destroying a device
authorMikulas Patocka <mpatocka@redhat.com>
Tue, 7 Jan 2014 04:01:22 +0000 (23:01 -0500)
committerMike Snitzer <snitzer@redhat.com>
Tue, 7 Jan 2014 19:09:09 +0000 (14:09 -0500)
commitaf7b1e5c767fc895788c971c8f4686402ac8344f
tree9cfaef139722da4118b4fcd906eb1196d9577b23
parent1ddd641ddcfa46d719189468b6856e9b17381a61
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
drivers/md/dm-sysfs.c
drivers/md/dm.c
drivers/md/dm.h