diff options
author | jhb <jhb@FreeBSD.org> | 2011-12-29 15:34:59 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2011-12-29 15:34:59 +0000 |
commit | cab9e82ffb3a5e2fc4e0ed75a4737d51cee8da3f (patch) | |
tree | acd39eeb2ae13ecca105959b2a76566811d61e36 /sys/compat/linux | |
parent | 7b15bf872a96f2f4221e0d54b376fcddb77a03d5 (diff) | |
download | FreeBSD-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/linux')
-rw-r--r-- | sys/compat/linux/linux_file.c | 45 |
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)); +} |