| From: |
| pmeda@akamai.com |
| To: |
| akpm@osdl.org |
| Subject: |
| [PATCH 1/2] madvise: do not split the maps |
| Date: |
| Wed, 16 Mar 2005 01:31:02 -0800 |
| Cc: |
| linux-mm@kvack.org |
| Archive-link: |
| Article,
Thread
|
This attempts to avoid splittings when it is not
needed, that is when vm_flags are same as new flags.
The idea is from the <2.6.11 mlock_fixup and others.
This will provide base for the next madvise merging
patch.
Signed-off-by: Prasanna Meda <pmeda@akamai.com>
--- linux/mm/madvise.c Mon Mar 14 23:46:16 2005
+++ Linux/mm/madvise.c Wed Mar 16 06:17:58 2005
@@ -19,6 +19,21 @@
{
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 @@
* 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)
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"aart@kvack.org"> aart@kvack.org </a>