X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=mm%2Fslob.c;h=773a7aa80ab5ce53883cd7ad4d07a6019a175fe0;hb=e6f3602d2c58815775b2a293cec6650622236169;hp=5bc2ceb692ec94925340e0b65ce4cb8695e2cee1;hpb=c548f08a4f7b89b93c805e0c4024b8302afa7121;p=powerpc.git diff --git a/mm/slob.c b/mm/slob.c index 5bc2ceb692..773a7aa80a 100644 --- a/mm/slob.c +++ b/mm/slob.c @@ -321,7 +321,8 @@ static void *slob_alloc(size_t size, gfp_t gfp, int align, int node) /* Improve fragment distribution and reduce our average * search time by starting our next search here. (see * Knuth vol 1, sec 2.5, pg 449) */ - if (free_slob_pages.next != prev->next) + if (prev != free_slob_pages.prev && + free_slob_pages.next != prev->next) list_move_tail(&free_slob_pages, prev->next); break; } @@ -329,7 +330,7 @@ static void *slob_alloc(size_t size, gfp_t gfp, int align, int node) /* Not enough space: must allocate a new page */ if (!b) { - b = slob_new_page(gfp, 0, node); + b = slob_new_page(gfp & ~__GFP_ZERO, 0, node); if (!b) return 0; sp = (struct slob_page *)virt_to_page(b); @@ -494,6 +495,7 @@ size_t ksize(const void *block) else return sp->page.private; } +EXPORT_SYMBOL(ksize); struct kmem_cache { unsigned int size, align;