git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
drm: silence pointless vblank warning.
[safe/jmp/linux-2.6]
/
mm
/
madvise.c
diff --git
a/mm/madvise.c
b/mm/madvise.c
index
b9ce574
..
76eb419
100644
(file)
--- a/
mm/madvise.c
+++ b/
mm/madvise.c
@@
-123,8
+123,7
@@
static long madvise_willneed(struct vm_area_struct * vma,
end = vma->vm_end;
end = ((end - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff;
end = vma->vm_end;
end = ((end - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff;
- force_page_cache_readahead(file->f_mapping,
- file, start, max_sane_readahead(end - start));
+ force_page_cache_readahead(file->f_mapping, file, start, end - start);
return 0;
}
return 0;
}
@@
-239,12
+238,30
@@
madvise_vma(struct vm_area_struct *vma, struct vm_area_struct **prev,
break;
default:
break;
default:
-
error = -EINVAL
;
+
BUG()
;
break;
}
return error;
}
break;
}
return error;
}
+static int
+madvise_behavior_valid(int behavior)
+{
+ switch (behavior) {
+ case MADV_DOFORK:
+ case MADV_DONTFORK:
+ case MADV_NORMAL:
+ case MADV_SEQUENTIAL:
+ case MADV_RANDOM:
+ case MADV_REMOVE:
+ case MADV_WILLNEED:
+ case MADV_DONTNEED:
+ return 1;
+
+ default:
+ return 0;
+ }
+}
/*
* The madvise(2) system call.
*
/*
* The madvise(2) system call.
*
@@
-290,6
+307,9
@@
SYSCALL_DEFINE3(madvise, unsigned long, start, size_t, len_in, int, behavior)
int write;
size_t len;
int write;
size_t len;
+ if (!madvise_behavior_valid(behavior))
+ return error;
+
write = madvise_need_mmap_write(behavior);
if (write)
down_write(¤t->mm->mmap_sem);
write = madvise_need_mmap_write(behavior);
if (write)
down_write(¤t->mm->mmap_sem);