]> git.proxmox.com Git - mirror_spl-debian.git/commitdiff
SLES10 Fixes (part 8)
authorBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 20 May 2009 23:33:08 +0000 (16:33 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 20 May 2009 23:33:08 +0000 (16:33 -0700)
- Add compat_ioctl() handler, by default 64-bit SLES systems build 32-bit
  ELF binaries.  For the 32-bit binaries to pass ioctl information to a
  64-bit kernel a compatibility handler needs to be registered.  In our
  case no additional conversions are needed to convert 32-bit ioctl()
  commands to 64-bit commands so we can just call the default handler.

module/splat/splat-ctl.c

index 2ff62ffb00e2321e397c78391f6bb2a261b62580..c123f5bf9ea160c14e96a440e0acd79550e3ebb5 100644 (file)
@@ -460,6 +460,15 @@ splat_ioctl(struct inode *inode, struct file *file,
        return rc;
 }
 
+#ifdef CONFIG_COMPAT
+/* Compatibility handler for ioctls from 32-bit ELF binaries */
+static long
+splat_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
+{
+       return splat_ioctl(NULL, file, cmd, arg);
+}
+#endif /* CONFIG_COMPAT */
+
 /* I'm not sure why you would want to write in to this buffer from
  * user space since its principle use is to pass test status info
  * back to the user space, but I don't see any reason to prevent it.
@@ -573,13 +582,16 @@ static loff_t splat_seek(struct file *file, loff_t offset, int origin)
 }
 
 static struct file_operations splat_fops = {
-       .owner   = THIS_MODULE,
-       .open    = splat_open,
-       .release = splat_release,
-       .ioctl   = splat_ioctl,
-       .read    = splat_read,
-       .write   = splat_write,
-       .llseek  = splat_seek,
+       .owner          = THIS_MODULE,
+       .open           = splat_open,
+       .release        = splat_release,
+       .ioctl          = splat_ioctl,
+#ifdef CONFIG_COMPAT
+       .compat_ioctl   = splat_compat_ioctl,
+#endif
+       .read           = splat_read,
+       .write          = splat_write,
+       .llseek         = splat_seek,
 };
 
 static struct cdev splat_cdev = {