X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=mm%2Ffadvise.c;h=8d723c9e8b75b316041ea564f5e243b79a94e2b7;hb=7645a24cbd01cbf4865d1273d5ddaa8d8c2ccb3a;hp=e43359214f6ff15020b6f05cc07aa5e6ddcb4162;hpb=385861206c21364c01dcfdda5064643ce111d517;p=~andy%2Flinux diff --git a/mm/fadvise.c b/mm/fadvise.c index e43359214f6..8d723c9e8b7 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) switch (advice) { case POSIX_FADV_NORMAL: file->f_ra.ra_pages = bdi->ra_pages; + spin_lock(&file->f_lock); + file->f_mode &= ~FMODE_RANDOM; + spin_unlock(&file->f_lock); break; case POSIX_FADV_RANDOM: - file->f_ra.ra_pages = 0; + spin_lock(&file->f_lock); + file->f_mode |= FMODE_RANDOM; + spin_unlock(&file->f_lock); break; case POSIX_FADV_SEQUENTIAL: file->f_ra.ra_pages = bdi->ra_pages * 2; + spin_lock(&file->f_lock); + file->f_mode &= ~FMODE_RANDOM; + spin_unlock(&file->f_lock); break; case POSIX_FADV_WILLNEED: if (!mapping->a_ops->readpage) {