[DRBD-cvs] drbd by phil; * out #ifdefed error injection code in d...

drbd-user@lists.linbit.com drbd-user@lists.linbit.com
Wed, 11 Feb 2004 23:59:31 +0100 (CET)


DRBD CVS committal

Author  : phil
Module  : drbd

Dir     : drbd/drbd


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


Log Message:
* out #ifdefed error injection code in drbd_dio_end_sec()
* Abort resync on local io error.
* down() the device_mutex before calling drbd_set_set() on 
  module unload.

  [ Debugging of the on-io-error code ongoing. Works as long as 
    no IO error happens :) ]

===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_dsender.c,v
retrieving revision 1.1.2.73
retrieving revision 1.1.2.74
diff -u -3 -r1.1.2.73 -r1.1.2.74
--- drbd_dsender.c	11 Feb 2004 13:25:20 -0000	1.1.2.73
+++ drbd_dsender.c	11 Feb 2004 22:59:26 -0000	1.1.2.74
@@ -215,6 +215,19 @@
 	mdev=bio->bi_private;
 	PARANOIA_BUG_ON(!IS_VALID_MDEV(mdev));
 
+
+#if 0
+	{
+		static int ccc=1;
+
+		if(ccc++ % 100 == 0) {
+			ERR("Injecting IO error.\n");
+			error=-5;
+			clear_bit(BIO_UPTODATE,&bio->bi_flags);
+		}
+	}
+#endif
+
 	e = container_of(bio,struct Tl_epoch_entry,private_bio);
 	PARANOIA_BUG_ON(!VALID_POINTER(e));
 	D_ASSERT(e->block_id != ID_VACANT);
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_int.h,v
retrieving revision 1.58.2.122
retrieving revision 1.58.2.123
diff -u -3 -r1.58.2.122 -r1.58.2.123
--- drbd_int.h	11 Feb 2004 22:03:52 -0000	1.58.2.122
+++ drbd_int.h	11 Feb 2004 22:59:26 -0000	1.58.2.123
@@ -911,6 +911,14 @@
 
 #include "drbd_compat_wrappers.h"
 
+static inline void set_cstate(drbd_dev* mdev,Drbd_CState ns)
+{
+	unsigned long flags;
+	spin_lock_irqsave(&mdev->req_lock,flags);
+	_set_cstate(mdev,ns);
+	spin_unlock_irqrestore(&mdev->req_lock,flags);
+}
+
 /**
  * drbd_chk_io_error: Handles the on_io_error setting, should be called from
  * all io completion handlers.
@@ -949,6 +957,12 @@
 			ok = drbd_send_param(mdev,0);
 			set_bit(SENT_DISK_FAILURE,&mdev->flags);
 			WARN("Notified peer that my disk is broken.\n");
+			if(mdev->cstate > Connected ) {
+				WARN("Resync aborted.\n");
+				if(mdev->cstate == SyncTarget)
+					set_bit(STOP_SYNC_TIMER,&mdev->flags);
+				set_cstate(mdev,Connected);
+			}
 		}
 	}
 
@@ -975,14 +989,6 @@
 	} else {
 		return 2 * MD_RESERVED_SIZE * mdev->md_index;
 	}
-}
-
-static inline void set_cstate(drbd_dev* mdev,Drbd_CState ns)
-{
-	unsigned long flags;
-	spin_lock_irqsave(&mdev->req_lock,flags);
-	_set_cstate(mdev,ns);
-	spin_unlock_irqrestore(&mdev->req_lock,flags);
 }
 
 static inline void
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_main.c,v
retrieving revision 1.73.2.127
retrieving revision 1.73.2.128
diff -u -3 -r1.73.2.127 -r1.73.2.128
--- drbd_main.c	9 Feb 2004 10:36:54 -0000	1.73.2.127
+++ drbd_main.c	11 Feb 2004 22:59:26 -0000	1.73.2.128
@@ -1437,12 +1437,16 @@
 	int i;
 
 	for (i = 0; i < minor_count; i++) {
-		drbd_set_state(drbd_conf+i,Secondary);
-		drbd_sync_me(drbd_conf+i);
-		set_bit(DO_NOT_INC_CONCNT,&drbd_conf[i].flags);
-		drbd_thread_stop(&drbd_conf[i].worker);
-		drbd_thread_stop(&drbd_conf[i].receiver);
-		drbd_thread_stop(&drbd_conf[i].asender);
+		drbd_dev    *mdev = drbd_conf + i;
+
+		down(&mdev->device_mutex);
+		drbd_set_state(mdev,Secondary);
+		up(&mdev->device_mutex);
+		drbd_sync_me(mdev);
+		set_bit(DO_NOT_INC_CONCNT,&mdev->flags);
+		drbd_thread_stop(&mdev->worker);
+		drbd_thread_stop(&mdev->receiver);
+		drbd_thread_stop(&mdev->asender);
 	}
 
 #if defined(CONFIG_PPC64) || defined(CONFIG_SPARC64) || defined(CONFIG_X86_64)