X-Git-Url: http://pilppa.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=block%2Fioctl.c;h=c832d639b6e254eb375d9c69504172182ab14c4d;hb=a70dcb969f64e2fa98c24f47854f20bf02ff0092;hp=bd214cb37f2b892bff799207d269a33a5762fb27;hpb=45048d0961cdbf7ddfba906797ad8cb42489e070;p=linux-2.6-omap-h63xx.git diff --git a/block/ioctl.c b/block/ioctl.c index bd214cb37f2..c832d639b6e 100644 --- a/block/ioctl.c +++ b/block/ioctl.c @@ -230,20 +230,13 @@ EXPORT_SYMBOL_GPL(__blkdev_driver_ioctl); * always keep this in sync with compat_blkdev_ioctl() and * compat_blkdev_locked_ioctl() */ -int blkdev_ioctl(struct inode *inode, struct file *file, unsigned cmd, +int blkdev_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd, unsigned long arg) { - struct block_device *bdev = inode->i_bdev; struct gendisk *disk = bdev->bd_disk; struct backing_dev_info *bdi; loff_t size; int ret, n; - fmode_t mode = 0; - if (file) { - mode = file->f_mode; - if (file->f_flags & O_NDELAY) - mode |= FMODE_NDELAY_NOW; - } switch(cmd) { case BLKFLSBUF: @@ -343,10 +336,11 @@ int blkdev_ioctl(struct inode *inode, struct file *file, unsigned cmd, return -EINVAL; if (get_user(n, (int __user *) arg)) return -EFAULT; - if (bd_claim(bdev, file) < 0) + if (!(mode & FMODE_EXCL) && bd_claim(bdev, &bdev) < 0) return -EBUSY; ret = set_blocksize(bdev, n); - bd_release(bdev); + if (!(mode & FMODE_EXCL)) + bd_release(bdev); return ret; case BLKPG: lock_kernel();