This pushes the BKL down into the driver.  Based on a patch by Alan Cox.

We need to do it this way for now as the inode parameter of viotap_ioctl
is used internally as a flag.  We should do a further cleanup patch.

Cc: Alan Cox <[EMAIL PROTECTED]>
Signed-off-by: Stephen Rothwell <[EMAIL PROTECTED]>
---
 drivers/char/viotape.c |   24 ++++++++++++++++++------
 1 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/drivers/char/viotape.c b/drivers/char/viotape.c
index 58aad63..0dda915 100644
--- a/drivers/char/viotape.c
+++ b/drivers/char/viotape.c
@@ -46,6 +46,7 @@
 #include <linux/completion.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
+#include <linux/smp_lock.h>
 
 #include <asm/uaccess.h>
 #include <asm/ioctls.h>
@@ -677,6 +678,17 @@ free_op:
        return ret;
 }
 
+static long viotap_unlocked_ioctl(struct file *file,
+               unsigned int cmd, unsigned long arg)
+{
+       long rc;
+
+       lock_kernel();
+       rc = viotap_ioctl(file->f_path.dentry->d_inode, file, cmd, arg);
+       unlock_kernel();
+       return rc;
+}
+
 static int viotap_open(struct inode *inode, struct file *file)
 {
        HvLpEvent_Rc hvrc;
@@ -783,12 +795,12 @@ free_op:
 }
 
 const struct file_operations viotap_fops = {
-       .owner =        THIS_MODULE,
-       .read =         viotap_read,
-       .write =        viotap_write,
-       .ioctl =        viotap_ioctl,
-       .open =         viotap_open,
-       .release =      viotap_release,
+       .owner =                THIS_MODULE,
+       .read =                 viotap_read,
+       .write =                viotap_write,
+       .unlocked_ioctl =       viotap_unlocked_ioctl,
+       .open =                 viotap_open,
+       .release =              viotap_release,
 };
 
 /* Handle interrupt events for tape */
-- 
1.5.5.1


-- 
Cheers,
Stephen Rothwell                    [EMAIL PROTECTED]
http://www.canb.auug.org.au/~sfr/
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Reply via email to