{
        struct kmem_cache_node *n = NULL, *n2 = NULL;
        struct page *page, *discard_page = NULL;
-       unsigned long flags;
-
-       local_irq_save(flags);
+       unsigned long flags = 0;
 
        while (partial_page) {
                struct page new;
                n2 = get_node(s, page_to_nid(page));
                if (n != n2) {
                        if (n)
-                               spin_unlock(&n->list_lock);
+                               spin_unlock_irqrestore(&n->list_lock, flags);
 
                        n = n2;
-                       spin_lock(&n->list_lock);
+                       spin_lock_irqsave(&n->list_lock, flags);
                }
 
                do {
        }
 
        if (n)
-               spin_unlock(&n->list_lock);
-
-       local_irq_restore(flags);
+               spin_unlock_irqrestore(&n->list_lock, flags);
 
        while (discard_page) {
                page = discard_page;