[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)