diff options
author | Rajman Mekaco <rajman.mekaco@gmail.com> | 2012-05-29 18:06:21 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-05-29 19:22:19 -0400 |
commit | 841e31e5cc6219d62054788faa289b6ed682d068 (patch) | |
tree | 6c6bbcf2be5082c5bdc71bfccad4d57be0e99126 /mm/mmap.c | |
parent | 4d67d860531ad5378dedfad7661c540f3365013d (diff) |
mm/mmap.c: find_vma(): remove unnecessary if(mm) check
The "if (mm)" check is not required in find_vma, as the kernel code
calls find_vma only when it is absolutely sure that the mm_struct arg to
it is non-NULL.
Remove the if(mm) check and adding the a WARN_ONCE(!mm) for now. This
will serve the purpose of mandating that the execution
context(user-mode/kernel-mode) be known before find_vma is called. Also
fixed 2 checkpatch.pl errors in the declaration of the rb_node and
vma_tmp local variables.
I was browsing through the internet and read a discussion at
https://lkml.org/lkml/2012/3/27/342 which discusses removal of the
validation check within find_vma. Since no-one responded, I decided to
send this patch with Andrew's suggestions.
[akpm@linux-foundation.org: add remove-me comment]
Signed-off-by: Rajman Mekaco <rajman.mekaco@gmail.com>
Cc: Kautuk Consul <consul.kautuk@gmail.com>
Cc: Hugh Dickins <hughd@google.com>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Acked-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/mmap.c')
-rw-r--r-- | mm/mmap.c | 53 |
1 files changed, 27 insertions, 26 deletions
@@ -1639,33 +1639,34 @@ struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr) | |||
1639 | { | 1639 | { |
1640 | struct vm_area_struct *vma = NULL; | 1640 | struct vm_area_struct *vma = NULL; |
1641 | 1641 | ||
1642 | if (mm) { | 1642 | if (WARN_ON_ONCE(!mm)) /* Remove this in linux-3.6 */ |
1643 | /* Check the cache first. */ | 1643 | return NULL; |
1644 | /* (Cache hit rate is typically around 35%.) */ | 1644 | |
1645 | vma = mm->mmap_cache; | 1645 | /* Check the cache first. */ |
1646 | if (!(vma && vma->vm_end > addr && vma->vm_start <= addr)) { | 1646 | /* (Cache hit rate is typically around 35%.) */ |
1647 | struct rb_node * rb_node; | 1647 | vma = mm->mmap_cache; |
1648 | 1648 | if (!(vma && vma->vm_end > addr && vma->vm_start <= addr)) { | |
1649 | rb_node = mm->mm_rb.rb_node; | 1649 | struct rb_node *rb_node; |
1650 | vma = NULL; | 1650 | |
1651 | 1651 | rb_node = mm->mm_rb.rb_node; | |
1652 | while (rb_node) { | 1652 | vma = NULL; |
1653 | struct vm_area_struct * vma_tmp; | 1653 | |
1654 | 1654 | while (rb_node) { | |
1655 | vma_tmp = rb_entry(rb_node, | 1655 | struct vm_area_struct *vma_tmp; |
1656 | struct vm_area_struct, vm_rb); | 1656 | |
1657 | 1657 | vma_tmp = rb_entry(rb_node, | |
1658 | if (vma_tmp->vm_end > addr) { | 1658 | struct vm_area_struct, vm_rb); |
1659 | vma = vma_tmp; | 1659 | |
1660 | if (vma_tmp->vm_start <= addr) | 1660 | if (vma_tmp->vm_end > addr) { |
1661 | break; | 1661 | vma = vma_tmp; |
1662 | rb_node = rb_node->rb_left; | 1662 | if (vma_tmp->vm_start <= addr) |
1663 | } else | 1663 | break; |
1664 | rb_node = rb_node->rb_right; | 1664 | rb_node = rb_node->rb_left; |
1665 | } | 1665 | } else |
1666 | if (vma) | 1666 | rb_node = rb_node->rb_right; |
1667 | mm->mmap_cache = vma; | ||
1668 | } | 1667 | } |
1668 | if (vma) | ||
1669 | mm->mmap_cache = vma; | ||
1669 | } | 1670 | } |
1670 | return vma; | 1671 | return vma; |
1671 | } | 1672 | } |