diff options
Diffstat (limited to 'mm/fadvise.c')
-rw-r--r-- | mm/fadvise.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/mm/fadvise.c b/mm/fadvise.c index e43359214f6f..8d723c9e8b75 100644 --- a/mm/fadvise.c +++ b/mm/fadvise.c | |||
@@ -77,12 +77,20 @@ SYSCALL_DEFINE(fadvise64_64)(int fd, loff_t offset, loff_t len, int advice) | |||
77 | switch (advice) { | 77 | switch (advice) { |
78 | case POSIX_FADV_NORMAL: | 78 | case POSIX_FADV_NORMAL: |
79 | file->f_ra.ra_pages = bdi->ra_pages; | 79 | file->f_ra.ra_pages = bdi->ra_pages; |
80 | spin_lock(&file->f_lock); | ||
81 | file->f_mode &= ~FMODE_RANDOM; | ||
82 | spin_unlock(&file->f_lock); | ||
80 | break; | 83 | break; |
81 | case POSIX_FADV_RANDOM: | 84 | case POSIX_FADV_RANDOM: |
82 | file->f_ra.ra_pages = 0; | 85 | spin_lock(&file->f_lock); |
86 | file->f_mode |= FMODE_RANDOM; | ||
87 | spin_unlock(&file->f_lock); | ||
83 | break; | 88 | break; |
84 | case POSIX_FADV_SEQUENTIAL: | 89 | case POSIX_FADV_SEQUENTIAL: |
85 | file->f_ra.ra_pages = bdi->ra_pages * 2; | 90 | file->f_ra.ra_pages = bdi->ra_pages * 2; |
91 | spin_lock(&file->f_lock); | ||
92 | file->f_mode &= ~FMODE_RANDOM; | ||
93 | spin_unlock(&file->f_lock); | ||
86 | break; | 94 | break; |
87 | case POSIX_FADV_WILLNEED: | 95 | case POSIX_FADV_WILLNEED: |
88 | if (!mapping->a_ops->readpage) { | 96 | if (!mapping->a_ops->readpage) { |