From f14bf86dd1241d69785b0949d9907f7c9906322b Mon Sep 17 00:00:00 2001 From: Prasanna Meda Date: Tue, 21 Jun 2005 17:14:36 -0700 Subject: [PATCH] --- yaml --- r: 2440 b: refs/heads/master c: e798c6e87b64d9fdbd5e9f757b1c033223763d9f h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/mm/madvise.c | 27 ++++++++++++++++----------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/[refs] b/[refs] index 3037e230ba36..f395e71b119e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b15e0905f2b9964fc7426fecab57445e96021b61 +refs/heads/master: e798c6e87b64d9fdbd5e9f757b1c033223763d9f diff --git a/trunk/mm/madvise.c b/trunk/mm/madvise.c index 944b5e52d812..75b81ad1f98c 100644 --- a/trunk/mm/madvise.c +++ b/trunk/mm/madvise.c @@ -19,6 +19,21 @@ static long madvise_behavior(struct vm_area_struct * vma, unsigned long start, { struct mm_struct * mm = vma->vm_mm; int error = 0; + int new_flags = vma->vm_flags & ~VM_READHINTMASK; + + switch (behavior) { + case MADV_SEQUENTIAL: + new_flags |= VM_SEQ_READ; + break; + case MADV_RANDOM: + new_flags |= VM_RAND_READ; + break; + default: + break; + } + + if (new_flags == vma->vm_flags) + goto out; if (start != vma->vm_start) { error = split_vma(mm, vma, start, 1); @@ -36,17 +51,7 @@ static long madvise_behavior(struct vm_area_struct * vma, unsigned long start, * vm_flags is protected by the mmap_sem held in write mode. */ VM_ClearReadHint(vma); - - switch (behavior) { - case MADV_SEQUENTIAL: - vma->vm_flags |= VM_SEQ_READ; - break; - case MADV_RANDOM: - vma->vm_flags |= VM_RAND_READ; - break; - default: - break; - } + vma->vm_flags = new_flags; out: if (error == -ENOMEM)