[PATCH] s390: fadvise hint values.
[deliverable/linux.git] / arch / s390 / kernel / compat_linux.c
index 614056222875f86a6210c9d4b8057894b562131f..18610cea03a21d6d59bfb23224ecf1672678c7bc 100644 (file)
@@ -58,6 +58,7 @@
 #include <linux/compat.h>
 #include <linux/vfs.h>
 #include <linux/ptrace.h>
+#include <linux/fadvise.h>
 
 #include <asm/types.h>
 #include <asm/ipc.h>
@@ -1043,3 +1044,40 @@ sys32_timer_create(clockid_t which_clock, struct compat_sigevent *se32,
 
        return ret;
 }
+
+/*
+ * 31 bit emulation wrapper functions for sys_fadvise64/fadvise64_64.
+ * These need to rewrite the advise values for POSIX_FADV_{DONTNEED,NOREUSE}
+ * because the 31 bit values differ from the 64 bit values.
+ */
+
+asmlinkage long
+sys32_fadvise64(int fd, loff_t offset, size_t len, int advise)
+{
+       if (advise == 4)
+               advise = POSIX_FADV_DONTNEED;
+       else if (advise == 5)
+               advise = POSIX_FADV_NOREUSE;
+       return sys_fadvise64(fd, offset, len, advise);
+}
+
+struct fadvise64_64_args {
+       int fd;
+       long long offset;
+       long long len;
+       int advice;
+};
+
+asmlinkage long
+sys32_fadvise64_64(struct fadvise64_64_args __user *args)
+{
+       struct fadvise64_64_args a;
+
+       if ( copy_from_user(&a, args, sizeof(a)) )
+               return -EFAULT;
+       if (a.advice == 4)
+               a.advice = POSIX_FADV_DONTNEED;
+       else if (a.advice == 5)
+               a.advice = POSIX_FADV_NOREUSE;
+       return sys_fadvise64_64(a.fd, a.offset, a.len, a.advice);
+}
This page took 0.04818 seconds and 5 git commands to generate.