slob: fix lockup in slob_free()
[safe/jmp/linux-2.6] / mm / slob.c
index bf7e8fc..f901653 100644 (file)
--- a/mm/slob.c
+++ b/mm/slob.c
@@ -393,10 +393,11 @@ static void slob_free(void *block, int size)
                /* Go directly to page allocator. Do not pass slob allocator */
                if (slob_page_free(sp))
                        clear_slob_page_free(sp);
+               spin_unlock_irqrestore(&slob_lock, flags);
                clear_slob_page(sp);
                free_slob_page(sp);
                free_page((unsigned long)b);
-               goto out;
+               return;
        }
 
        if (!slob_page_free(sp)) {