summaryrefslogtreecommitdiffstats
path: root/sys/compat
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2011-12-29 15:34:59 +0000
committerjhb <jhb@FreeBSD.org>2011-12-29 15:34:59 +0000
commitcab9e82ffb3a5e2fc4e0ed75a4737d51cee8da3f (patch)
treeacd39eeb2ae13ecca105959b2a76566811d61e36 /sys/compat
parent7b15bf872a96f2f4221e0d54b376fcddb77a03d5 (diff)
downloadFreeBSD-src-cab9e82ffb3a5e2fc4e0ed75a4737d51cee8da3f.zip
FreeBSD-src-cab9e82ffb3a5e2fc4e0ed75a4737d51cee8da3f.tar.gz
Implement linux_fadvise64() and linux_fadvise64_64() using
kern_posix_fadvise(). Reviewed by: silence on emulation@ MFC after: 2 weeks
Diffstat (limited to 'sys/compat')
-rw-r--r--sys/compat/linux/linux_file.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/sys/compat/linux/linux_file.c b/sys/compat/linux/linux_file.c
index ffa2282..c04156c 100644
--- a/sys/compat/linux/linux_file.c
+++ b/sys/compat/linux/linux_file.c
@@ -1530,3 +1530,48 @@ linux_lchown(struct thread *td, struct linux_lchown_args *args)
LFREEPATH(path);
return (error);
}
+
+static int
+convert_fadvice(int advice)
+{
+ switch (advice) {
+ case LINUX_POSIX_FADV_NORMAL:
+ return (POSIX_FADV_NORMAL);
+ case LINUX_POSIX_FADV_RANDOM:
+ return (POSIX_FADV_RANDOM);
+ case LINUX_POSIX_FADV_SEQUENTIAL:
+ return (POSIX_FADV_SEQUENTIAL);
+ case LINUX_POSIX_FADV_WILLNEED:
+ return (POSIX_FADV_WILLNEED);
+ case LINUX_POSIX_FADV_DONTNEED:
+ return (POSIX_FADV_DONTNEED);
+ case LINUX_POSIX_FADV_NOREUSE:
+ return (POSIX_FADV_NOREUSE);
+ default:
+ return (-1);
+ }
+}
+
+int
+linux_fadvise64(struct thread *td, struct linux_fadvise64_args *args)
+{
+ int advice;
+
+ advice = convert_fadvice(args->advice);
+ if (advice == -1)
+ return (EINVAL);
+ return (kern_posix_fadvise(td, args->fd, args->offset, args->len,
+ advice));
+}
+
+int
+linux_fadvise64_64(struct thread *td, struct linux_fadvise64_64_args *args)
+{
+ int advice;
+
+ advice = convert_fadvice(args->advice);
+ if (advice == -1)
+ return (EINVAL);
+ return (kern_posix_fadvise(td, args->fd, args->offset, args->len,
+ advice));
+}
OpenPOWER on IntegriCloud