Mike Snitzer 63a4f065ec dm: fix add_disk() NULL pointer due to race with free_dev()
Commit c4db59d31e39 ("fs: don't reassign dirty inodes to
default_backing_dev_info") exposed DM to a latent race in free_dev() vs
add_disk() in relation to management of the device's minor number.

Fix this by refactoring free_dev() to match cleanup order of the
alloc_dev() error path.  Move cleanup of the gendisk, queue, and bdev
to _before_ the cleanup of the idr managed minor number.

Also, purely due to cleanup that fell out during the free_dev() audit:
- adjust dm_blk_close() to access the gendisk's private_data under
  the _minor_lock spinlock.
- move __dm_destroy()'s dm_get_live_table() call out from under the
  _minor_lock spinlock.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1202449

Reported-by: Zdenek Kabelac <zkabelac@redhat.com>
Reported-by: Jeff Moyer <jmoyer@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
2015-03-23 18:14:00 -04:00
..
2015-02-15 11:11:47 -08:00
2015-02-17 09:27:54 -08:00
2015-02-19 20:58:42 -06:00
2015-02-17 09:27:54 -08:00
2015-02-15 10:48:44 -08:00
2015-02-12 09:16:56 -08:00
2015-02-03 15:48:51 -08:00
2015-02-03 15:58:39 -08:00
2015-02-18 09:05:48 -08:00
2015-02-15 10:48:44 -08:00
2015-02-18 08:01:44 -08:00
2015-02-04 09:15:18 +01:00
2015-02-18 09:43:46 -08:00
2015-02-17 09:38:59 -08:00
2015-02-15 10:24:55 -08:00
2015-02-18 08:40:29 +01:00
2015-02-18 09:05:48 -08:00
2015-02-21 19:16:42 -08:00
2015-02-17 09:38:59 -08:00
2015-02-15 10:24:55 -08:00
2015-02-11 10:28:45 -08:00
2015-02-03 15:58:39 -08:00