From: Andrea Arcangeli 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 Signed-off-by: Andrew Morton --- 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 * _