Index: kernel/generic/src/mm/frame.c
===================================================================
--- kernel/generic/src/mm/frame.c	(revision c3ebc47808497be5b06d4cc84b2406a50fbbc76f)
+++ kernel/generic/src/mm/frame.c	(revision 4527fb5b9cd99ab3d0607e26e017b7ea0f92d227)
@@ -993,5 +993,11 @@
 	   if it does not help, reclaim all */
 	if ((znum == (count_t) -1) && (!(flags & FRAME_NO_RECLAIM))) {
+		spinlock_unlock(&zones.lock);
+		interrupts_restore(ipl);
+		
 		count_t freed = slab_reclaim(0);
+		
+		ipl = interrupts_disable();
+		spinlock_lock(&zones.lock);
 		
 		if (freed > 0)
@@ -1000,5 +1006,12 @@
 		
 		if (znum == (count_t) -1) {
+			spinlock_unlock(&zones.lock);
+			interrupts_restore(ipl);
+			
 			freed = slab_reclaim(SLAB_RECLAIM_ALL);
+			
+			ipl = interrupts_disable();
+			spinlock_lock(&zones.lock);
+			
 			if (freed > 0)
 				znum = find_free_zone(order,
