Commit e5c7fb40 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe
Browse files

block: move the devcgroup_inode_permission call to blkdev_get



devcgroup_inode_permission is never called for the recusive case, so
move it out into blkdev_get.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 46d40cfa
Loading
Loading
Loading
Loading
+17 −19
Original line number Diff line number Diff line
@@ -1449,22 +1449,8 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, void *holder,
	struct gendisk *disk;
	int ret;
	int partno;
	int perm = 0;
	bool first_open = false, unblock_events = true, need_restart;

	if (mode & FMODE_READ)
		perm |= MAY_READ;
	if (mode & FMODE_WRITE)
		perm |= MAY_WRITE;
	/*
	 * hooks: /n/, see "layering violations".
	 */
	if (!for_part) {
		ret = devcgroup_inode_permission(bdev->bd_inode, perm);
		if (ret != 0)
			return ret;
	}

 restart:
	need_restart = false;
	ret = -ENXIO;
@@ -1637,12 +1623,24 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, void *holder,
 */
int blkdev_get(struct block_device *bdev, fmode_t mode, void *holder)
{
	int res;
	int ret, perm = 0;

	if (mode & FMODE_READ)
		perm |= MAY_READ;
	if (mode & FMODE_WRITE)
		perm |= MAY_WRITE;
	ret = devcgroup_inode_permission(bdev->bd_inode, perm);
	if (ret)
		goto bdput;

	res =__blkdev_get(bdev, mode, holder, 0);
	if (res)
	ret =__blkdev_get(bdev, mode, holder, 0);
	if (ret)
		goto bdput;
	return 0;

bdput:
	bdput(bdev);
	return res;
	return ret;
}
EXPORT_SYMBOL(blkdev_get);