* Copyright (C) 1991, 1992 Linus Torvalds
*/
+#include <linux/config.h>
#include <linux/mm.h>
#include <linux/smp_lock.h>
#include <linux/file.h>
#include <linux/fs.h>
#include <linux/security.h>
+#include <linux/module.h>
#include <linux/proc_fs.h>
#include <linux/vserver/inode.h>
#include <linux/vserver/xid.h>
#include <asm/uaccess.h>
#include <asm/ioctls.h>
-#ifdef CONFIG_VSERVER_LEGACY
+#ifdef CONFIG_VSERVER_LEGACY
extern int vx_proc_ioctl(struct inode *, struct file *,
unsigned int, unsigned long);
#endif
int error;
int block;
struct inode * inode = filp->f_dentry->d_inode;
+ int __user *p = (int __user *)arg;
switch (cmd) {
case FIBMAP:
return -EINVAL;
if (!capable(CAP_SYS_RAWIO))
return -EPERM;
- if ((error = get_user(block, (int *) arg)) != 0)
+ if ((error = get_user(block, p)) != 0)
return error;
res = mapping->a_ops->bmap(mapping, block);
- return put_user(res, (int *) arg);
+ return put_user(res, p);
}
case FIGETBSZ:
if (inode->i_sb == NULL)
return -EBADF;
- return put_user(inode->i_sb->s_blocksize, (int *) arg);
+ return put_user(inode->i_sb->s_blocksize, p);
case FIONREAD:
- return put_user(i_size_read(inode) - filp->f_pos, (int *) arg);
+ return put_user(i_size_read(inode) - filp->f_pos, p);
}
if (filp->f_op && filp->f_op->ioctl)
return filp->f_op->ioctl(inode, filp, cmd, arg);
else
error = -ENOTTY;
break;
-#ifdef CONFIG_VSERVER_LEGACY
+#ifdef CONFIG_VSERVER_LEGACY
#ifndef CONFIG_INOXID_NONE
case FIOC_GETXID: {
struct inode *inode = filp->f_dentry->d_inode;
inode->i_xid = (xid & 0xFFFF);
inode->i_ctime = CURRENT_TIME;
mark_inode_dirty(inode);
- break;
+ break;
}
#endif
case FIOC_GETXFLG:
out:
return error;
}
+
+/*
+ * Platforms implementing 32 bit compatibility ioctl handlers in
+ * modules need this exported
+ */
+#ifdef CONFIG_COMPAT
+EXPORT_SYMBOL(sys_ioctl);
+#endif