diff options
author | Amir Goldstein <amir73il@gmail.com> | 2018-08-28 03:58:41 -0400 |
---|---|---|
committer | Miklos Szeredi <mszeredi@redhat.com> | 2018-09-03 03:43:10 -0400 |
commit | b833a3660394876541d2513ce2736debc7c6797a (patch) | |
tree | 3c3605d860fadf27cffeaaf48a292ae1ec69afb6 | |
parent | 3d8f7615319b2bca87a4815e13787439e3339a93 (diff) |
ovl: add ovl_fadvise()
Implement stacked fadvise to fix syscalls readahead(2) and fadvise64(2)
on an overlayfs file.
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>
-rw-r--r-- | fs/overlayfs/file.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c index a4acd84591d4..aeaefd2a551b 100644 --- a/fs/overlayfs/file.c +++ b/fs/overlayfs/file.c | |||
@@ -331,6 +331,25 @@ static long ovl_fallocate(struct file *file, int mode, loff_t offset, loff_t len | |||
331 | return ret; | 331 | return ret; |
332 | } | 332 | } |
333 | 333 | ||
334 | static int ovl_fadvise(struct file *file, loff_t offset, loff_t len, int advice) | ||
335 | { | ||
336 | struct fd real; | ||
337 | const struct cred *old_cred; | ||
338 | int ret; | ||
339 | |||
340 | ret = ovl_real_fdget(file, &real); | ||
341 | if (ret) | ||
342 | return ret; | ||
343 | |||
344 | old_cred = ovl_override_creds(file_inode(file)->i_sb); | ||
345 | ret = vfs_fadvise(real.file, offset, len, advice); | ||
346 | revert_creds(old_cred); | ||
347 | |||
348 | fdput(real); | ||
349 | |||
350 | return ret; | ||
351 | } | ||
352 | |||
334 | static long ovl_real_ioctl(struct file *file, unsigned int cmd, | 353 | static long ovl_real_ioctl(struct file *file, unsigned int cmd, |
335 | unsigned long arg) | 354 | unsigned long arg) |
336 | { | 355 | { |
@@ -499,6 +518,7 @@ const struct file_operations ovl_file_operations = { | |||
499 | .fsync = ovl_fsync, | 518 | .fsync = ovl_fsync, |
500 | .mmap = ovl_mmap, | 519 | .mmap = ovl_mmap, |
501 | .fallocate = ovl_fallocate, | 520 | .fallocate = ovl_fallocate, |
521 | .fadvise = ovl_fadvise, | ||
502 | .unlocked_ioctl = ovl_ioctl, | 522 | .unlocked_ioctl = ovl_ioctl, |
503 | .compat_ioctl = ovl_compat_ioctl, | 523 | .compat_ioctl = ovl_compat_ioctl, |
504 | 524 | ||