[DRBD-cvs] svn commit by phil - r2297 - trunk/drbd - Changed the way we start/stop the worker thread. * It n

drbd-cvs at lists.linbit.com drbd-cvs at lists.linbit.com
Wed Jul 26 11:25:49 CEST 2006


Author: phil
Date: 2006-07-26 11:25:48 +0200 (Wed, 26 Jul 2006)
New Revision: 2297

Modified:
   trunk/drbd/drbd_fs.c
   trunk/drbd/drbd_main.c
   trunk/drbd/drbd_receiver.c
Log:
Changed the way we start/stop the worker thread. 
* It no longer gets restarted when we loose the connection.
* Starting / Stopping is handled with state transitions.


Modified: trunk/drbd/drbd_fs.c
===================================================================
--- trunk/drbd/drbd_fs.c	2006-07-25 13:55:36 UTC (rev 2296)
+++ trunk/drbd/drbd_fs.c	2006-07-26 09:25:48 UTC (rev 2297)
@@ -538,7 +538,6 @@
 		drbd_send_sizes(mdev);  // to start sync...
 		drbd_send_uuids(mdev);
 		drbd_send_state(mdev);
-		drbd_thread_start(&mdev->worker);
 	} else {
 		spin_lock_irq(&mdev->req_lock);
 		os = mdev->state;
@@ -577,9 +576,7 @@
 		spin_unlock_irq(&mdev->req_lock);
 		after_state_ch(mdev,os,ns,ChgStateVerbose);
 
-		if(rv >= SS_Success ) {
-			drbd_thread_start(&mdev->worker);
-		} else {
+		if(rv < SS_Success ) {
 			drbd_bm_unlock(mdev);
 			goto  release_bdev3_fail_ioctl;
 		}
@@ -789,7 +786,6 @@
 	}
 	mdev->cram_hmac_tfm = tfm;
 
-	drbd_thread_start(&mdev->worker);
 	if( drbd_request_state(mdev,NS(conn,Unconnected)) >= SS_Success ) {
 		drbd_thread_start(&mdev->receiver);
 	}

Modified: trunk/drbd/drbd_main.c
===================================================================
--- trunk/drbd/drbd_main.c	2006-07-25 13:55:36 UTC (rev 2296)
+++ trunk/drbd/drbd_main.c	2006-07-26 09:25:48 UTC (rev 2297)
@@ -1079,9 +1079,15 @@
 		lc_free(mdev->act_log); mdev->act_log = NULL;
 	}
 
+	if ( os.disk == Diskless && os.conn == StandAlone &&
+	     (ns.disk > Diskless || ns.conn > StandAlone) ) {
+		drbd_thread_start(&mdev->worker);
+	}
+
 	/* it feels better to have the module_put last ... */
 	if ( (os.disk > Diskless || os.conn > StandAlone) &&
 	     ns.disk == Diskless && ns.conn == StandAlone ) {
+		drbd_thread_stop(&mdev->worker);
 		drbd_mdev_cleanup(mdev);
 		module_put(THIS_MODULE);
 	}
@@ -2218,7 +2224,6 @@
 				up(&mdev->device_mutex);
 				drbd_sync_me(mdev);
 				drbd_thread_stop(&mdev->receiver);
-				drbd_thread_stop(&mdev->worker);
 			}
 		}
 

Modified: trunk/drbd/drbd_receiver.c
===================================================================
--- trunk/drbd/drbd_receiver.c	2006-07-25 13:55:36 UTC (rev 2296)
+++ trunk/drbd/drbd_receiver.c	2006-07-26 09:25:48 UTC (rev 2297)
@@ -2430,7 +2430,6 @@
 		dec_local(mdev);
 	}
 
-	drbd_thread_stop_nowait(&mdev->worker);
 	drbd_thread_stop(&mdev->asender);
 
 	down(&mdev->data.mutex);
@@ -2440,7 +2439,6 @@
 	up(&mdev->data.mutex);
 
 	drbd_fail_pending_reads(mdev);
-	drbd_thread_stop(&mdev->worker);
 	// now worker is dead and read_ee is empty
 	drbd_rs_cancel_all(mdev);
 
@@ -2498,10 +2496,8 @@
 
 	if (get_t_state(&mdev->receiver) == Exiting) {
 		drbd_force_state(mdev,NS(conn,StandAlone));
-		drbd_thread_start(&mdev->worker);
 	} else {
 		drbd_force_state(mdev,NS(conn,Unconnected));
-		drbd_thread_start(&mdev->worker);
 	}
 
 	if ( mdev->state.role == Primary ) {		



More information about the drbd-cvs mailing list