From: Andrew Morton The last lock_kernel() has disappeared from loop.c. Switch it over to using unlocked_ioctl. Cc: Diego Woitasen Cc: Christoph Hellwig Signed-off-by: Andrew Morton --- drivers/block/loop.c | 12 +++++++----- 1 files changed, 7 insertions(+), 5 deletions(-) diff -puN drivers/block/loop.c~loop-use-unlocked_ioctl drivers/block/loop.c --- a/drivers/block/loop.c~loop-use-unlocked_ioctl +++ a/drivers/block/loop.c @@ -1124,12 +1124,14 @@ loop_get_status64(struct loop_device *lo return err; } -static int lo_ioctl(struct inode * inode, struct file * file, - unsigned int cmd, unsigned long arg) +static long lo_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { - struct loop_device *lo = inode->i_bdev->bd_disk->private_data; + struct inode *inode; + struct loop_device *lo; int err; + inode = file->f_mapping->host; + lo = inode->i_bdev->bd_disk->private_data; mutex_lock(&lo->lo_ctl_mutex); switch (cmd) { case LOOP_SET_FD: @@ -1304,7 +1306,7 @@ static long lo_compat_ioctl(struct file arg = (unsigned long) compat_ptr(arg); case LOOP_SET_FD: case LOOP_CHANGE_FD: - err = lo_ioctl(inode, file, cmd, arg); + err = lo_ioctl(file, cmd, arg); break; default: err = -ENOIOCTLCMD; @@ -1340,7 +1342,7 @@ static struct block_device_operations lo .owner = THIS_MODULE, .open = lo_open, .release = lo_release, - .ioctl = lo_ioctl, + .unlocked_ioctl = lo_ioctl, #ifdef CONFIG_COMPAT .compat_ioctl = lo_compat_ioctl, #endif _