Skip to content

Commit

Permalink
block: simplify the restart case in __blkdev_get
Browse files Browse the repository at this point in the history
Insted of duplicating all the cleanup logic jump to the code that cleans
up anyway, and restart after that.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
  • Loading branch information
Christoph Hellwig authored and axboe committed Jul 16, 2020
1 parent e791ee6 commit c5638ab
Showing 1 changed file with 10 additions and 15 deletions.
25 changes: 10 additions & 15 deletions fs/block_dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -1517,7 +1517,7 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
int ret;
int partno;
int perm = 0;
bool first_open = false;
bool first_open = false, need_restart;

if (mode & FMODE_READ)
perm |= MAY_READ;
Expand All @@ -1533,7 +1533,7 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
}

restart:

need_restart = false;
ret = -ENXIO;
disk = bdev_get_gendisk(bdev, &partno);
if (!disk)
Expand All @@ -1556,19 +1556,12 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
ret = 0;
if (disk->fops->open) {
ret = disk->fops->open(bdev, mode);
if (ret == -ERESTARTSYS) {
/* Lost a race with 'disk' being
* deleted, try again.
* See md.c
*/
disk_put_part(bdev->bd_part);
bdev->bd_part = NULL;
bdev->bd_disk = NULL;
mutex_unlock(&bdev->bd_mutex);
disk_unblock_events(disk);
put_disk_and_module(disk);
goto restart;
}
/*
* If we lost a race with 'disk' being deleted,
* try again. See md.c
*/
if (ret == -ERESTARTSYS)
need_restart = true;
}

if (!ret) {
Expand Down Expand Up @@ -1647,6 +1640,8 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
mutex_unlock(&bdev->bd_mutex);
disk_unblock_events(disk);
put_disk_and_module(disk);
if (need_restart)
goto restart;
out:

return ret;
Expand Down

0 comments on commit c5638ab

Please sign in to comment.