[DRBD-cvs] svn commit by phil - r2593 - trunk/drbd - One more fix to the 'handle IO errors on secondary code

drbd-cvs at lists.linbit.com drbd-cvs at lists.linbit.com
Wed Nov 15 16:26:22 CET 2006


Author: phil
Date: 2006-11-15 16:26:21 +0100 (Wed, 15 Nov 2006)
New Revision: 2593

Modified:
   trunk/drbd/drbd_actlog.c
   trunk/drbd/drbd_int.h
   trunk/drbd/drbd_receiver.c
Log:
One more fix to the 'handle IO errors on secondary code':
   * We need to update the sequence number also, if we 
     are going to send a NegAck.

Added tracing code to drbd_al_begin_io() and drbd_al_complete_io().


Modified: trunk/drbd/drbd_actlog.c
===================================================================
--- trunk/drbd/drbd_actlog.c	2006-11-15 14:12:37 UTC (rev 2592)
+++ trunk/drbd/drbd_actlog.c	2006-11-15 15:26:21 UTC (rev 2593)
@@ -224,6 +224,12 @@
 	struct update_al_work al_work;
 
 	D_ASSERT(atomic_read(&mdev->local_cnt)>0);
+
+	MTRACE(TraceTypeALExts,TraceLvlMetrics,
+	       INFO("al_begin_io( sec=%llus (al_enr=%u) (rs_enr=%d) )\n",
+		    sector, enr, (int)BM_SECT_TO_EXT(sector));
+	       );
+
 	wait_event(mdev->al_wait, (al_ext = _al_get(mdev,enr)) );
 
 	if (al_ext->lc_number != enr) {
@@ -267,6 +273,11 @@
 	struct lc_element *extent;
 	unsigned long flags;
 
+	MTRACE(TraceTypeALExts,TraceLvlMetrics,
+	       INFO("al_complete_io( sec=%llus (al_enr=%u) (rs_enr=%d) )\n",
+		    sector, enr, (int)BM_SECT_TO_EXT(sector));
+	       );
+
 	spin_lock_irqsave(&mdev->al_lock,flags);
 
 	extent = lc_find(mdev->act_log,enr);
@@ -914,8 +925,8 @@
 	int i, sig;
 
 	MTRACE(TraceTypeResync, TraceLvlAll,
-	       INFO("drbd_rs_begin_io: sector=%llus\n",
-		    (unsigned long long)sector);
+	       INFO("drbd_rs_begin_io: sector=%llus (rs_end=%d)\n",
+		    (unsigned long long)sector,enr);
 	    );
 
 	sig = wait_event_interruptible( mdev->al_wait,
@@ -1075,8 +1086,8 @@
 	unsigned long flags;
 
 	MTRACE(TraceTypeResync, TraceLvlAll,
-	       INFO("drbd_rs_complete_io: sector=%llus\n",
-		    (long long)sector);
+	       INFO("drbd_rs_complete_io: sector=%llus (rs_enr=%d)\n",
+		    (long long)sector, enr);
 	    );
 
 	spin_lock_irqsave(&mdev->al_lock,flags);

Modified: trunk/drbd/drbd_int.h
===================================================================
--- trunk/drbd/drbd_int.h	2006-11-15 14:12:37 UTC (rev 2592)
+++ trunk/drbd/drbd_int.h	2006-11-15 15:26:21 UTC (rev 2593)
@@ -1182,6 +1182,7 @@
 	TraceTypeEE     = 0x00000010,
 	TraceTypeUnplug = 0x00000020,
 	TraceTypeNl     = 0x00000040,
+	TraceTypeALExts = 0x00000080,
 };
 
 static inline int

Modified: trunk/drbd/drbd_receiver.c
===================================================================
--- trunk/drbd/drbd_receiver.c	2006-11-15 14:12:37 UTC (rev 2592)
+++ trunk/drbd/drbd_receiver.c	2006-11-15 15:26:21 UTC (rev 2593)
@@ -1305,6 +1305,11 @@
 		 * or in drbd_endio_write_sec. */
 		if (DRBD_ratelimit(5*HZ,5))
 			ERR("Can not write mirrored data block to local disk.\n");
+		spin_lock(&mdev->peer_seq_lock);
+		if (mdev->peer_seq+1 == be32_to_cpu(p->seq_num))
+			mdev->peer_seq++;
+		spin_unlock(&mdev->peer_seq_lock);
+
 		drbd_send_ack_dp(mdev,NegAck,p);
 		mdev->epoch_size++; // spin lock ?
 		return drbd_drain_block(mdev,data_size);



More information about the drbd-cvs mailing list