[DRBD-cvs] r1504 - trunk/drbd

svn at svn.drbd.org svn at svn.drbd.org
Thu Aug 26 13:23:05 CEST 2004


Author: phil
Date: 2004-08-26 13:23:02 +0200 (Thu, 26 Aug 2004)
New Revision: 1504

Modified:
   trunk/drbd/drbd_fs.c
Log:
Allow invalidate if cstate<Connected and Secondary


Modified: trunk/drbd/drbd_fs.c
===================================================================
--- trunk/drbd/drbd_fs.c	2004-08-25 14:38:07 UTC (rev 1503)
+++ trunk/drbd/drbd_fs.c	2004-08-26 11:23:02 UTC (rev 1504)
@@ -1152,19 +1152,22 @@
 		 * differentiate between different error cases,
 		 * or report the current connection state and flags back
 		 * to userspace */
-		if( mdev->cstate != Connected ||
+		if( mdev->cstate < StandAlone ||
+		    mdev->cstate > Connected ||
 		    test_bit(DISKLESS,&mdev->flags) || 
 		    test_bit(PARTNER_DISKLESS,&mdev->flags) ) {
 			err = -EINPROGRESS;
 			break;
 		}
 
-		/* avoid races with set_in_sync
-		 * for successfull mirrored writes
-		 */
-		set_cstate(mdev,WFBitMapT);
-		wait_event(mdev->cstate_wait,
-		     atomic_read(&mdev->ap_bio_cnt)==0);
+		if (mdev->cstate == Connected) {
+			/* avoid races with set_in_sync
+			 * for successfull mirrored writes
+			 */
+			set_cstate(mdev,WFBitMapT);
+			wait_event(mdev->cstate_wait,
+				   atomic_read(&mdev->ap_bio_cnt)==0);
+		}
 
 		drbd_bm_lock(mdev); // racy...
 
@@ -1178,8 +1181,10 @@
 		drbd_md_clear_flag(mdev,MDF_FullSync);
 		drbd_md_write(mdev);
 
-		drbd_send_short_cmd(mdev,BecomeSyncSource);
-		drbd_start_resync(mdev,SyncTarget);
+		if (mdev->cstate == Connected) {	
+			drbd_send_short_cmd(mdev,BecomeSyncSource);
+			drbd_start_resync(mdev,SyncTarget);
+		}
 
 		drbd_bm_unlock(mdev);
 



More information about the drbd-cvs mailing list