[patch] block: remove BKL dependency from drivers/block/loop.c

From: Ingo Molnar
Date: Wed Dec 27 2006 - 06:54:49 EST


Subject: [patch] block: remove BKL dependency from drivers/block/loop.c
From: Ingo Molnar <mingo@xxxxxxx>

the block loopback device is protected by lo->lo_ctl_mutex and it does
not need to hold the BKL anywhere. Convert its ioctl to unlocked_ioctl
and remove the BKL acquire/release from its compat_ioctl.

Signed-off-by: Ingo Molnar <mingo@xxxxxxx>
---
drivers/block/loop.c | 20 +++++++++-----------
1 file changed, 9 insertions(+), 11 deletions(-)

Index: linux/drivers/block/loop.c
===================================================================
--- linux.orig/drivers/block/loop.c
+++ linux/drivers/block/loop.c
@@ -1130,9 +1130,9 @@ 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 inode *inode = file->f_path.dentry->d_inode;
struct loop_device *lo = inode->i_bdev->bd_disk->private_data;
int err;

@@ -1291,8 +1291,7 @@ static long lo_compat_ioctl(struct file
struct loop_device *lo = inode->i_bdev->bd_disk->private_data;
int err;

- lock_kernel();
- switch(cmd) {
+ switch (cmd) {
case LOOP_SET_STATUS:
mutex_lock(&lo->lo_ctl_mutex);
err = loop_set_status_compat(
@@ -1311,13 +1310,12 @@ 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;
break;
}
- unlock_kernel();
return err;
}
#endif
@@ -1345,12 +1343,12 @@ static int lo_release(struct inode *inod
}

static struct block_device_operations lo_fops = {
- .owner = THIS_MODULE,
- .open = lo_open,
- .release = lo_release,
- .ioctl = lo_ioctl,
+ .owner = THIS_MODULE,
+ .open = lo_open,
+ .release = lo_release,
+ .unlocked_ioctl = lo_ioctl,
#ifdef CONFIG_COMPAT
- .compat_ioctl = lo_compat_ioctl,
+ .compat_ioctl = lo_compat_ioctl,
#endif
};

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/