diff options
| -rw-r--r-- | block/ioctl.c | 8 | 
1 files changed, 5 insertions, 3 deletions
| diff --git a/block/ioctl.c b/block/ioctl.c index 9049d460fa89..1124cd297263 100644 --- a/block/ioctl.c +++ b/block/ioctl.c @@ -294,9 +294,11 @@ int blkdev_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd,  			return -EINVAL;  		if (get_user(n, (int __user *) arg))  			return -EFAULT; -		if (!(mode & FMODE_EXCL) && -		    blkdev_get(bdev, mode | FMODE_EXCL, &bdev) < 0) -			return -EBUSY; +		if (!(mode & FMODE_EXCL)) { +			bdgrab(bdev); +			if (blkdev_get(bdev, mode | FMODE_EXCL, &bdev) < 0) +				return -EBUSY; +		}  		ret = set_blocksize(bdev, n);  		if (!(mode & FMODE_EXCL))  			blkdev_put(bdev, mode | FMODE_EXCL); | 
