From: Andrea Arcangeli <andrea@novell.com> Some optimizations in mempolicy.c (like to avoid rebalancing the tree while destroying it and by breaking loops early and not checking for invariant conditions in the replace operation). Signed-off-by: Andrea Arcangeli <andrea@novell.com> Signed-off-by: Andrew Morton <akpm@osdl.org> --- 25-akpm/mm/mempolicy.c | 10 ++++------ 1 files changed, 4 insertions(+), 6 deletions(-) diff -puN mm/mempolicy.c~mempolicy-optimization mm/mempolicy.c --- 25/mm/mempolicy.c~mempolicy-optimization 2004-11-17 20:45:58.526581512 -0800 +++ 25-akpm/mm/mempolicy.c 2004-11-17 20:45:58.531580752 -0800 @@ -1212,12 +1212,10 @@ restart: return -ENOMEM; goto restart; } - n->end = end; + n->end = start; sp_insert(sp, new2); - new2 = NULL; - } - /* Old crossing beginning, but not end (easy) */ - if (n->start < start && n->end > start) + break; + } else n->end = start; } if (!next) @@ -1271,11 +1269,11 @@ void mpol_free_shared_policy(struct shar while (next) { n = rb_entry(next, struct sp_node, nd); next = rb_next(&n->nd); - rb_erase(&n->nd, &p->root); mpol_free(n->policy); kmem_cache_free(sn_cache, n); } spin_unlock(&p->lock); + p->root = RB_ROOT; } struct page * _