Index: kernel/generic/src/mm/frame.c
===================================================================
--- kernel/generic/src/mm/frame.c	(revision 3f2177ec3c014007b443a285b62e08c76358c767)
+++ kernel/generic/src/mm/frame.c	(revision 7d440e37e1f2b1dd61cdeb800e63b239608e913d)
@@ -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,
