Add support 32 bit FS_IOC32_{GET|SET}FLAGS compat ioctls

We need 32 bit userspace FS_IOC32_GETFLAGS and FS_IOC32_SETFLAGS
compat ioctls for systems such as powerpc64.  We use the normal
compat ioctl idiom as used by a variety of file systems to provide
this support.

Signed-off-by: Colin Ian King <colin.king@canonical.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #4477
This commit is contained in:
Colin Ian King 2016-03-30 23:00:23 +01:00 committed by Brian Behlendorf
parent e4023e42a8
commit f7b939bdbc
1 changed files with 14 additions and 1 deletions

View File

@ -24,6 +24,9 @@
*/ */
#ifdef CONFIG_COMPAT
#include <linux/compat.h>
#endif
#include <sys/dmu_objset.h> #include <sys/dmu_objset.h>
#include <sys/zfs_vfsops.h> #include <sys/zfs_vfsops.h>
#include <sys/zfs_vnops.h> #include <sys/zfs_vnops.h>
@ -798,7 +801,17 @@ zpl_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
static long static long
zpl_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) zpl_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{ {
return (zpl_ioctl(filp, cmd, arg)); switch (cmd) {
case FS_IOC32_GETFLAGS:
cmd = FS_IOC_GETFLAGS;
break;
case FS_IOC32_SETFLAGS:
cmd = FS_IOC_SETFLAGS;
break;
default:
return (-ENOTTY);
}
return (zpl_ioctl(filp, cmd, (unsigned long)compat_ptr(arg)));
} }
#endif /* CONFIG_COMPAT */ #endif /* CONFIG_COMPAT */