[DRBD-cvs] DRBD CVS: drbd by phil from

drbd-user@lists.linbit.com drbd-user@lists.linbit.com
Thu, 15 Jan 2004 16:21:07 +0100 (CET)


DRBD CVS committal

Author  : phil
Host    : 
Module  : drbd

Dir     : drbd/drbd


Modified Files:
      Tag: rel-0_7-branch
	drbd_actlog.c drbd_dsender.c drbd_int.h drbd_receiver.c 


Log Message:
Tried to fix w_resync_finished() logic. 
Testing needed. Will do later...

===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_actlog.c,v
retrieving revision 1.1.2.53
retrieving revision 1.1.2.54
diff -u -3 -r1.1.2.53 -r1.1.2.54
--- drbd_actlog.c	15 Jan 2004 14:26:29 -0000	1.1.2.53
+++ drbd_actlog.c	15 Jan 2004 15:21:07 -0000	1.1.2.54
@@ -560,13 +560,14 @@
 	   from other places in non IRQ */
 	unsigned long flags=0;
 	int cleared;
-	/* notify of SYNC_FINISHED is now done by other means */
+	int finished=0;
 
 	cleared = bm_set_bit(mdev, sector, blk_size, SS_IN_SYNC);
 
 	spin_lock_irqsave(&mdev->al_lock,flags);
 	mdev->rs_left -= cleared;
 	D_ASSERT((long)mdev->rs_left >= 0);
+	if( cleared && mdev->rs_left == 0 ) finished=1;
 
 	if(jiffies - mdev->rs_mark_time > HZ*10) {
 		mdev->rs_mark_time=jiffies;
@@ -575,6 +576,13 @@
 	spin_unlock_irqrestore(&mdev->al_lock,flags);
 
 	drbd_try_clear_on_disk_bm(mdev,sector,cleared,may_sleep);
+
+	if( finished ) {
+		// This must be after the last call to clear_on_disk_bm() !
+		D_ASSERT( mdev->resync_work.cb == w_resync_inactive );
+		mdev->resync_work.cb = w_resync_finished;
+		__drbd_queue_work(mdev,&mdev->data.work,&mdev->resync_work);
+	}
 }
 
 
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_dsender.c,v
retrieving revision 1.1.2.47
retrieving revision 1.1.2.48
diff -u -3 -r1.1.2.47 -r1.1.2.48
--- drbd_dsender.c	15 Jan 2004 14:26:29 -0000	1.1.2.47
+++ drbd_dsender.c	15 Jan 2004 15:21:07 -0000	1.1.2.48
@@ -72,12 +72,6 @@
 	__drbd_queue_work(mdev,&mdev->data.work,&e->w);
 }
 
-int w_resync_source(drbd_dev *mdev, struct drbd_work *w)
-{
-	ERR("I seem to be resync source, but callback triggered??\n");
-	return 0;
-}
-
 int w_resync_inactive(drbd_dev *mdev, struct drbd_work *w)
 {
 	ERR("resync inactive, but callback triggered??\n");
@@ -155,8 +149,7 @@
 		if (sector == MBDS_DONE) {
 			INVALIDATE_MAGIC(pr);
 			mempool_free(pr,drbd_pr_mempool);
-			// __queue_work ... shortcut.
-			w_resync_finished(mdev,w);
+			mdev->resync_work.cb = w_resync_inactive;
 			return 1;
 		}
 
@@ -191,7 +184,6 @@
 	} else {
 		// If we are SyncSource we must be consistent :)
 		mdev->gen_cnt[Flags] |= MDF_Consistent;
-		w->cb = w_resync_source;
 		if ( mdev->rs_total == 0 ) {
 			w->cb = w_resync_finished;
 			__drbd_queue_work(mdev,&mdev->data.work,w);
@@ -216,7 +208,6 @@
 	if (mdev->cstate == SyncTarget) {
 		mdev->gen_cnt[Flags] |= MDF_Consistent;
 		drbd_md_write(mdev);
-		drbd_send_short_cmd(mdev,SyncDone);
 	}
 	mdev->rs_total = 0;
 	set_cstate(mdev,Connected);
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_int.h,v
retrieving revision 1.58.2.90
retrieving revision 1.58.2.91
diff -u -3 -r1.58.2.90 -r1.58.2.91
--- drbd_int.h	15 Jan 2004 14:26:29 -0000	1.58.2.90
+++ drbd_int.h	15 Jan 2004 15:21:07 -0000	1.58.2.91
@@ -344,7 +344,6 @@
 	SyncParam,
 	SyncStop,
 	SyncCont,
-	SyncDone,
 	MAX_CMD,
 	MayIgnore = 0x100, // Flag only to test if (cmd > MayIgnore) ...
 	MAX_OPT_CMD,
@@ -375,7 +374,6 @@
 	case SyncParam       : return "SyncParam";
 	case SyncStop        : return "SyncStop";
 	case SyncCont        : return "SyncCont";
-	case SyncDone        : return "SyncDone";
 	case MAX_CMD         : return "MAX_CMD";
 	case MayIgnore       : return "MayIgnore";
 	case MAX_OPT_CMD     : return "MAX_OPT_CMD";
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_receiver.c,v
retrieving revision 1.97.2.81
retrieving revision 1.97.2.82
diff -u -3 -r1.97.2.81 -r1.97.2.82
--- drbd_receiver.c	15 Jan 2004 14:26:29 -0000	1.97.2.81
+++ drbd_receiver.c	15 Jan 2004 15:21:07 -0000	1.97.2.82
@@ -1532,27 +1532,6 @@
 	return TRUE; // cannot fail ?
 }
 
-STATIC int receive_SyncDone(drbd_dev *mdev, Drbd_Header *h)
-{
-	unsigned long dt;
-	D_ASSERT(mdev->cstate == SyncSource);
-	D_ASSERT(mdev->resync_work.cb == w_resync_source);
-
-	INIT_LIST_HEAD(&mdev->resync_work.list);
-	mdev->resync_work.cb = w_resync_inactive;
-
-	dt = (jiffies - mdev->rs_start) / HZ + 1;
-	INFO("Resync done (total %lu sec; %lu K/sec)\n",
-	     dt,(mdev->rs_total/2)/dt);
-
-	mdev->rs_total = 0;
-	set_cstate(mdev,Connected);
-
-	// assert that all bit-map parts are cleared.
-	D_ASSERT(list_empty(&mdev->resync->lru));
-	return TRUE; // cannot fail ?
-}
-
 typedef int (*drbd_cmd_handler_f)(drbd_dev*,Drbd_Header*);
 
 static drbd_cmd_handler_f drbd_default_handler[] = {
@@ -1576,7 +1555,6 @@
 	[SyncParam]        = receive_SyncParam,
 	[SyncStop]         = receive_SyncStop,
 	[SyncCont]         = receive_SyncCont,
-	[SyncDone]         = receive_SyncDone,
 };
 
 static drbd_cmd_handler_f *drbd_cmd_handler = drbd_default_handler;