|
@@ -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) {
|