[DRBD-cvs] drbd by phil; Fixed the 'Debug: sleeping function call...

drbd-user@lists.linbit.com drbd-user@lists.linbit.com
Thu, 6 May 2004 18:00:01 +0200 (CEST)


DRBD CVS committal

Author  : phil
Module  : drbd

Dir     : drbd/drbd


Modified Files:
      Tag: rel-0_7-branch
	drbd_receiver.c 


Log Message:
Fixed the 
'Debug: sleeping function called from invalid context at mm/slab.c'
bug

===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_receiver.c,v
retrieving revision 1.97.2.147
retrieving revision 1.97.2.148
diff -u -3 -r1.97.2.147 -r1.97.2.148
--- drbd_receiver.c	6 May 2004 13:59:14 -0000	1.97.2.147
+++ drbd_receiver.c	6 May 2004 15:59:55 -0000	1.97.2.148
@@ -268,11 +268,14 @@
 			prepare_to_wait(&mdev->ee_wait, &wait, 
 					TASK_INTERRUPTIBLE);
 			if(!list_empty(&mdev->free_ee)) break;
+			spin_unlock_irq(&mdev->ee_lock);
 			if( ( mdev->ee_vacant+mdev->ee_in_use) < 
 			      mdev->conf.max_buffers ) {
-				if(drbd_alloc_ee(mdev,GFP_TRY)) break;
+				if(drbd_alloc_ee(mdev,GFP_TRY)) {
+					spin_lock_irq(&mdev->ee_lock);
+					break;
+				}
 			}
-			spin_unlock_irq(&mdev->ee_lock);
 			drbd_kick_lo(mdev);
 			schedule();
 			spin_lock_irq(&mdev->ee_lock);