git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
vserver 1.9.3
[linux-2.6.git]
/
fs
/
ioctl.c
diff --git
a/fs/ioctl.c
b/fs/ioctl.c
index
f84ba41
..
c4d38f6
100644
(file)
--- a/
fs/ioctl.c
+++ b/
fs/ioctl.c
@@
-4,11
+4,13
@@
* Copyright (C) 1991, 1992 Linus Torvalds
*/
* 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/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 <linux/proc_fs.h>
#include <linux/vserver/inode.h>
#include <linux/vserver/xid.h>
@@
-16,7
+18,7
@@
#include <asm/uaccess.h>
#include <asm/ioctls.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
extern int vx_proc_ioctl(struct inode *, struct file *,
unsigned int, unsigned long);
#endif
@@
-26,6
+28,7
@@
static int file_ioctl(struct file *filp,unsigned int cmd,unsigned long arg)
int error;
int block;
struct inode * inode = filp->f_dentry->d_inode;
int error;
int block;
struct inode * inode = filp->f_dentry->d_inode;
+ int __user *p = (int __user *)arg;
switch (cmd) {
case FIBMAP:
switch (cmd) {
case FIBMAP:
@@
-37,18
+40,18
@@
static int file_ioctl(struct file *filp,unsigned int cmd,unsigned long arg)
return -EINVAL;
if (!capable(CAP_SYS_RAWIO))
return -EPERM;
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 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;
}
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:
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);
}
if (filp->f_op && filp->f_op->ioctl)
return filp->f_op->ioctl(inode, filp, cmd, arg);
@@
-127,7
+130,7
@@
asmlinkage long sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg)
else
error = -ENOTTY;
break;
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;
#ifndef CONFIG_INOXID_NONE
case FIOC_GETXID: {
struct inode *inode = filp->f_dentry->d_inode;
@@
-159,7
+162,7
@@
asmlinkage long sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg)
inode->i_xid = (xid & 0xFFFF);
inode->i_ctime = CURRENT_TIME;
mark_inode_dirty(inode);
inode->i_xid = (xid & 0xFFFF);
inode->i_ctime = CURRENT_TIME;
mark_inode_dirty(inode);
- break;
+ break;
}
#endif
case FIOC_GETXFLG:
}
#endif
case FIOC_GETXFLG:
@@
-182,3
+185,11
@@
asmlinkage long sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg)
out:
return error;
}
out:
return error;
}
+
+/*
+ * Platforms implementing 32 bit compatibility ioctl handlers in
+ * modules need this exported
+ */
+#ifdef CONFIG_COMPAT
+EXPORT_SYMBOL(sys_ioctl);
+#endif