forked from Minki/linux
block: move sync_blockdev from __blkdev_put to blkdev_put
Do the early unlocked syncing even earlier to move more code out of the recursive path. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Ming Lei <ming.lei@redhat.com> Reviewed-by: Hannes Reinecke <hare@suse.de> Link: https://lore.kernel.org/r/20210525061301.2242282-3-hch@lst.de Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
362529d928
commit
210a6d756f
@ -1552,16 +1552,6 @@ static void __blkdev_put(struct block_device *bdev, fmode_t mode, int for_part)
|
||||
struct gendisk *disk = bdev->bd_disk;
|
||||
struct block_device *victim = NULL;
|
||||
|
||||
/*
|
||||
* Sync early if it looks like we're the last one. If someone else
|
||||
* opens the block device between now and the decrement of bd_openers
|
||||
* then we did a sync that we didn't need to, but that's not the end
|
||||
* of the world and we want to avoid long (could be several minute)
|
||||
* syncs while holding the mutex.
|
||||
*/
|
||||
if (bdev->bd_openers == 1)
|
||||
sync_blockdev(bdev);
|
||||
|
||||
mutex_lock_nested(&bdev->bd_mutex, for_part);
|
||||
if (for_part)
|
||||
bdev->bd_part_count--;
|
||||
@ -1588,6 +1578,16 @@ void blkdev_put(struct block_device *bdev, fmode_t mode)
|
||||
{
|
||||
struct gendisk *disk = bdev->bd_disk;
|
||||
|
||||
/*
|
||||
* Sync early if it looks like we're the last one. If someone else
|
||||
* opens the block device between now and the decrement of bd_openers
|
||||
* then we did a sync that we didn't need to, but that's not the end
|
||||
* of the world and we want to avoid long (could be several minute)
|
||||
* syncs while holding the mutex.
|
||||
*/
|
||||
if (bdev->bd_openers == 1)
|
||||
sync_blockdev(bdev);
|
||||
|
||||
mutex_lock(&bdev->bd_mutex);
|
||||
|
||||
if (mode & FMODE_EXCL) {
|
||||
|
Loading…
Reference in New Issue
Block a user