Commit 586d232b authored by Mark Fasheh's avatar Mark Fasheh

ocfs2: Implement compat_ioctl()

We need this to support 32 bit system calls on 64 bit kernels.
Signed-off-by: default avatarMark Fasheh <mark.fasheh@oracle.com>
parent 40caf5ea
...@@ -1853,6 +1853,9 @@ const struct file_operations ocfs2_fops = { ...@@ -1853,6 +1853,9 @@ const struct file_operations ocfs2_fops = {
.aio_read = ocfs2_file_aio_read, .aio_read = ocfs2_file_aio_read,
.aio_write = ocfs2_file_aio_write, .aio_write = ocfs2_file_aio_write,
.ioctl = ocfs2_ioctl, .ioctl = ocfs2_ioctl,
#ifdef CONFIG_COMPAT
.compat_ioctl = ocfs2_compat_ioctl,
#endif
.splice_read = ocfs2_file_splice_read, .splice_read = ocfs2_file_splice_read,
.splice_write = ocfs2_file_splice_write, .splice_write = ocfs2_file_splice_write,
}; };
...@@ -1862,4 +1865,7 @@ const struct file_operations ocfs2_dops = { ...@@ -1862,4 +1865,7 @@ const struct file_operations ocfs2_dops = {
.readdir = ocfs2_readdir, .readdir = ocfs2_readdir,
.fsync = ocfs2_sync_file, .fsync = ocfs2_sync_file,
.ioctl = ocfs2_ioctl, .ioctl = ocfs2_ioctl,
#ifdef CONFIG_COMPAT
.compat_ioctl = ocfs2_compat_ioctl,
#endif
}; };
...@@ -134,3 +134,26 @@ int ocfs2_ioctl(struct inode * inode, struct file * filp, ...@@ -134,3 +134,26 @@ int ocfs2_ioctl(struct inode * inode, struct file * filp,
} }
} }
#ifdef CONFIG_COMPAT
long ocfs2_compat_ioctl(struct file *file, unsigned cmd, unsigned long arg)
{
struct inode *inode = file->f_path.dentry->d_inode;
int ret;
switch (cmd) {
case OCFS2_IOC32_GETFLAGS:
cmd = OCFS2_IOC_GETFLAGS;
break;
case OCFS2_IOC32_SETFLAGS:
cmd = OCFS2_IOC_SETFLAGS;
break;
default:
return -ENOIOCTLCMD;
}
lock_kernel();
ret = ocfs2_ioctl(inode, file, cmd, arg);
unlock_kernel();
return ret;
}
#endif
...@@ -12,5 +12,6 @@ ...@@ -12,5 +12,6 @@
int ocfs2_ioctl(struct inode * inode, struct file * filp, int ocfs2_ioctl(struct inode * inode, struct file * filp,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
long ocfs2_compat_ioctl(struct file *file, unsigned cmd, unsigned long arg);
#endif /* OCFS2_IOCTL_H */ #endif /* OCFS2_IOCTL_H */
...@@ -166,6 +166,8 @@ ...@@ -166,6 +166,8 @@
*/ */
#define OCFS2_IOC_GETFLAGS _IOR('f', 1, long) #define OCFS2_IOC_GETFLAGS _IOR('f', 1, long)
#define OCFS2_IOC_SETFLAGS _IOW('f', 2, long) #define OCFS2_IOC_SETFLAGS _IOW('f', 2, long)
#define OCFS2_IOC32_GETFLAGS _IOR('f', 1, int)
#define OCFS2_IOC32_SETFLAGS _IOW('f', 2, int)
/* /*
* Journal Flags (ocfs2_dinode.id1.journal1.i_flags) * Journal Flags (ocfs2_dinode.id1.journal1.i_flags)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment