diff options
Diffstat (limited to 'drivers/md/dm.c')
-rw-r--r-- | drivers/md/dm.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/md/dm.c b/drivers/md/dm.c index ace998ce59f6..a78caad29996 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c | |||
@@ -1146,7 +1146,7 @@ static void unlock_fs(struct mapped_device *md); | |||
1146 | 1146 | ||
1147 | static void free_dev(struct mapped_device *md) | 1147 | static void free_dev(struct mapped_device *md) |
1148 | { | 1148 | { |
1149 | int minor = md->disk->first_minor; | 1149 | int minor = MINOR(disk_devt(md->disk)); |
1150 | 1150 | ||
1151 | if (md->suspended_bdev) { | 1151 | if (md->suspended_bdev) { |
1152 | unlock_fs(md); | 1152 | unlock_fs(md); |
@@ -1267,7 +1267,7 @@ static struct mapped_device *dm_find_md(dev_t dev) | |||
1267 | 1267 | ||
1268 | md = idr_find(&_minor_idr, minor); | 1268 | md = idr_find(&_minor_idr, minor); |
1269 | if (md && (md == MINOR_ALLOCED || | 1269 | if (md && (md == MINOR_ALLOCED || |
1270 | (dm_disk(md)->first_minor != minor) || | 1270 | (MINOR(disk_devt(dm_disk(md))) != minor) || |
1271 | test_bit(DMF_FREEING, &md->flags))) { | 1271 | test_bit(DMF_FREEING, &md->flags))) { |
1272 | md = NULL; | 1272 | md = NULL; |
1273 | goto out; | 1273 | goto out; |
@@ -1318,7 +1318,8 @@ void dm_put(struct mapped_device *md) | |||
1318 | 1318 | ||
1319 | if (atomic_dec_and_lock(&md->holders, &_minor_lock)) { | 1319 | if (atomic_dec_and_lock(&md->holders, &_minor_lock)) { |
1320 | map = dm_get_table(md); | 1320 | map = dm_get_table(md); |
1321 | idr_replace(&_minor_idr, MINOR_ALLOCED, dm_disk(md)->first_minor); | 1321 | idr_replace(&_minor_idr, MINOR_ALLOCED, |
1322 | MINOR(disk_devt(dm_disk(md)))); | ||
1322 | set_bit(DMF_FREEING, &md->flags); | 1323 | set_bit(DMF_FREEING, &md->flags); |
1323 | spin_unlock(&_minor_lock); | 1324 | spin_unlock(&_minor_lock); |
1324 | if (!dm_suspended(md)) { | 1325 | if (!dm_suspended(md)) { |