block: cleanup blkdev_bszset
authorChristoph Hellwig <hch@lst.de>
Mon, 21 Sep 2020 07:19:47 +0000 (09:19 +0200)
committerJens Axboe <axboe@kernel.dk>
Wed, 23 Sep 2020 16:43:19 +0000 (10:43 -0600)
Use blkdev_get_by_dev instead of bdgrab + blkdev_get.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/ioctl.c

index ae74d04..06262c2 100644 (file)
@@ -478,15 +478,14 @@ static int blkdev_bszset(struct block_device *bdev, fmode_t mode,
        if (get_user(n, argp))
                return -EFAULT;
 
-       if (!(mode & FMODE_EXCL)) {
-               bdgrab(bdev);
-               if (blkdev_get(bdev, mode | FMODE_EXCL, &bdev) < 0)
-                       return -EBUSY;
-       }
+       if (mode & FMODE_EXCL)
+               return set_blocksize(bdev, n);
 
+       if (IS_ERR(blkdev_get_by_dev(bdev->bd_dev, mode | FMODE_EXCL, &bdev)))
+               return -EBUSY;
        ret = set_blocksize(bdev, n);
-       if (!(mode & FMODE_EXCL))
-               blkdev_put(bdev, mode | FMODE_EXCL);
+       blkdev_put(bdev, mode | FMODE_EXCL);
+
        return ret;
 }