summaryrefslogtreecommitdiff
path: root/mm/fadvise.c
diff options
context:
space:
mode:
authorAmir Goldstein <amir73il@gmail.com>2018-08-29 08:41:29 +0300
committerMiklos Szeredi <mszeredi@redhat.com>2018-08-30 20:01:32 +0200
commit3d8f7615319b2bca87a4815e13787439e3339a93 (patch)
treef7f5c2be4f572892747e47c9fc1001e86f74ca61 /mm/fadvise.c
parent45cd0faae3715e305bc46e23b34c5ed4d185ceb8 (diff)
downloadlwn-3d8f7615319b2bca87a4815e13787439e3339a93.tar.gz
lwn-3d8f7615319b2bca87a4815e13787439e3339a93.zip
vfs: implement readahead(2) using POSIX_FADV_WILLNEED
The implementation of readahead(2) syscall is identical to that of fadvise64(POSIX_FADV_WILLNEED) with a few exceptions: 1. readahead(2) returns -EINVAL for !mapping->a_ops and fadvise64() ignores the request and returns 0. 2. fadvise64() checks for integer overflow corner case 3. fadvise64() calls the optional filesystem fadvise() file operation Unite the two implementations by calling vfs_fadvise() from readahead(2) syscall. Check the !mapping->a_ops in readahead(2) syscall to preserve documented syscall ABI behaviour. Suggested-by: Miklos Szeredi <mszeredi@redhat.com> Fixes: d1d04ef8572b ("ovl: stack file ops") Signed-off-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Diffstat (limited to 'mm/fadvise.c')
-rw-r--r--mm/fadvise.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/mm/fadvise.c b/mm/fadvise.c
index 2f59bac1cb77..467bcd032037 100644
--- a/mm/fadvise.c
+++ b/mm/fadvise.c
@@ -188,6 +188,8 @@ int vfs_fadvise(struct file *file, loff_t offset, loff_t len, int advice)
}
EXPORT_SYMBOL(vfs_fadvise);
+#ifdef CONFIG_ADVISE_SYSCALLS
+
int ksys_fadvise64_64(int fd, loff_t offset, loff_t len, int advice)
{
struct fd f = fdget(fd);
@@ -215,3 +217,4 @@ SYSCALL_DEFINE4(fadvise64, int, fd, loff_t, offset, size_t, len, int, advice)
}
#endif
+#endif