summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSuzuki <suzuki@in.ibm.com>2005-10-11 17:29:06 +0200
committerLinus Torvalds <torvalds@g5.osdl.org>2005-10-11 18:46:54 +0200
commit1bef40032992320dd25a266fc166bfb8fa3f2f59 (patch)
treee02d654b4db45b752e3201c3f6eec3f4c719b69f
parent[PATCH] nfsacl: Solaris VxFS compatibility fix (diff)
downloadlinux-1bef40032992320dd25a266fc166bfb8fa3f2f59.tar.xz
linux-1bef40032992320dd25a266fc166bfb8fa3f2f59.zip
[PATCH] madvise: Avoid returning error code -EBADF for anonymous mappings
Revert this recent correctness change: Douglas Crosher <dcrosher@scieneer.com> reported that it broke an existing application, and that madvise() works without error on anonymous mappings on Solaris. This means that madvise() will remain non-standards-compliant: we should return -EBADF for all requests against non-file-backed vma's, but Linux only does this for MADV_WILLNEED requests. Signed-off-by: Suzuki K P <suzuki@in.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--mm/madvise.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/mm/madvise.c b/mm/madvise.c
index 4454936f87d1..20e075d1c64c 100644
--- a/mm/madvise.c
+++ b/mm/madvise.c
@@ -83,6 +83,9 @@ static long madvise_willneed(struct vm_area_struct * vma,
{
struct file *file = vma->vm_file;
+ if (!file)
+ return -EBADF;
+
if (file->f_mapping->a_ops->get_xip_page) {
/* no bad return value, but ignore advice */
return 0;
@@ -141,11 +144,7 @@ static long
madvise_vma(struct vm_area_struct *vma, struct vm_area_struct **prev,
unsigned long start, unsigned long end, int behavior)
{
- struct file *filp = vma->vm_file;
- long error = -EBADF;
-
- if (!filp)
- goto out;
+ long error;
switch (behavior) {
case MADV_NORMAL:
@@ -166,8 +165,6 @@ madvise_vma(struct vm_area_struct *vma, struct vm_area_struct **prev,
error = -EINVAL;
break;
}
-
-out:
return error;
}