mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
block: restore multiple bd_link_disk_holder() support
Commite09b457b(block: simplify holder symlink handling) incorrectly assumed that there is only one link at maximum. dm may use multiple links and expects block layer to track reference count for each link, which is different from and unrelated to the exclusive device holder identified by @holder when the device is opened. Remove the single holder assumption and automatic removal of the link and revive the per-link reference count tracking. The code essentially behaves the same as before commite09b457bsans the unnecessary kobject reference count dancing. While at it, note that this facility should not be used by anyone else than the current ones. Sysfs symlinks shouldn't be abused like this and the whole thing doesn't belong in the block layer at all. Signed-off-by: Tejun Heo <[email protected]> Reported-by: Milan Broz <[email protected]> Cc: Jun'ichi Nomura <[email protected]> Cc: Neil Brown <[email protected]> Cc: [email protected] Cc: Kay Sievers <[email protected]> Signed-off-by: Jens Axboe <[email protected]>
This commit is contained in:
parent
c553f8e335
commit
49731baa41
4 changed files with 84 additions and 19 deletions
|
|
@ -350,6 +350,7 @@ static void close_dev(struct dm_dev_internal *d, struct mapped_device *md)
|
|||
if (!d->dm_dev.bdev)
|
||||
return;
|
||||
|
||||
bd_unlink_disk_holder(d->dm_dev.bdev, dm_disk(md));
|
||||
blkdev_put(d->dm_dev.bdev, d->dm_dev.mode | FMODE_EXCL);
|
||||
d->dm_dev.bdev = NULL;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1912,6 +1912,7 @@ static void unbind_rdev_from_array(mdk_rdev_t * rdev)
|
|||
MD_BUG();
|
||||
return;
|
||||
}
|
||||
bd_unlink_disk_holder(rdev->bdev, rdev->mddev->gendisk);
|
||||
list_del_rcu(&rdev->same_set);
|
||||
printk(KERN_INFO "md: unbind<%s>\n", bdevname(rdev->bdev,b));
|
||||
rdev->mddev = NULL;
|
||||
|
|
|
|||
Loading…
Reference in a new issue