[prev in list] [next in list] [prev in thread] [next in thread]
List: drbd-cvs
Subject: [DRBD-cvs] drbd by lars; adding the panic patch, which was floati...
From: drbd-cvs () linbit ! com
Date: 2004-04-28 7:57:20
Message-ID: 20040428075720.33DB115DF5F () garcon ! linbit ! com
[Download RAW message or body]
DRBD CVS committal
Author : lars
Module : drbd
Dir : drbd/drbd
Modified Files:
Makefile drbd_int.h drbd_main.c drbd_receiver.c drbd_req-2.4.c
Log Message:
adding the panic patch, which was floating around since ages :)
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Makefile,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -3 -r1.30 -r1.31
--- Makefile 11 Mar 2004 11:51:28 -0000 1.30
+++ Makefile 28 Apr 2004 07:57:15 -0000 1.31
@@ -140,4 +140,8 @@
[ -e $(LINUX)/System.map ] && \
/sbin/depmod -F $(LINUX)/System.map -e ./drbd.o 2>&1 >/dev/null || true
endif
+
+ depmod: drbd.o
+ [ -e $(LINUX)/System.map ] && \
+ /sbin/depmod -F $(LINUX)/System.map -e ./drbd.o 2>&1 >/dev/null || true
endif
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_int.h,v
retrieving revision 1.79
retrieving revision 1.80
diff -u -3 -r1.79 -r1.80
--- drbd_int.h 6 Apr 2004 09:14:12 -0000 1.79
+++ drbd_int.h 28 Apr 2004 07:57:15 -0000 1.80
@@ -144,6 +144,39 @@
#define RQ_DRBD_WRITTEN 0xf300
#define RQ_DRBD_READ 0xf500
+
+#define DRBD_PANIC 2
+/* do_panic alternatives:
+ * 0: panic();
+ * 1: machine_halt; SORRY, this DOES NOT WORK
+ * 2: prink(EMERG ), plus flag to fail all eventual drbd IO, plus panic()
+ */
+
+extern volatile int drbd_did_panic;
+
+#include <linux/reboot.h>
+
+#if DRBD_PANIC == 0
+#define drbd_panic(x...) panic(x)
+#elif DRBD_PANIC == 1
+/* sorry , this does not work */
+#define drbd_panic(x...) do { \
+ printk(KERN_EMERG x); \
+ notifier_call_chain(&reboot_notifier_list, SYS_HALT, NULL); \
+ printk(KERN_EMERG "System halted.\n"); \
+ machine_halt(); \
+ do_exit(0); \
+} while (0)
+#else
+#define drbd_panic(x...) do { \
+ printk(KERN_EMERG x); \
+ drbd_did_panic = 1; \
+ smp_mb(); \
+ panic(x); \
+} while (0)
+#endif
+#undef DRBD_PANIC
+
/* This is the layout for a packet on the wire!
* The byteorder is the network byte order!
*/
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_main.c,v
retrieving revision 1.92
retrieving revision 1.93
diff -u -3 -r1.92 -r1.93
--- drbd_main.c 6 Apr 2004 09:14:12 -0000 1.92
+++ drbd_main.c 28 Apr 2004 07:57:15 -0000 1.93
@@ -113,6 +113,8 @@
int minor_count=2;
int disable_io_hints=0;
+volatile int drbd_did_panic = 0;
+
#if LINUX_VERSION_CODE > KERNEL_VERSION(2,3,40)
STATIC struct block_device_operations drbd_ops = {
#if LINUX_VERSION_CODE > KERNEL_VERSION(2,4,9)
@@ -772,7 +774,7 @@
if ( !drop_it ) {
printk(KERN_ERR DEVICE_NAME
- "%d: [%s/%d] sock_sendmsg time expired, ko = %u\n",
+ "%d: [%s/%d] sock_sendmsg timeout count down: ko=%u\n",
(int)(mdev-drbd_conf), task->comm, task->pid,
mdev->ko_count);
}
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_receiver.c,v
retrieving revision 1.136
retrieving revision 1.137
diff -u -3 -r1.136 -r1.137
--- drbd_receiver.c 6 Apr 2004 09:14:12 -0000 1.136
+++ drbd_receiver.c 28 Apr 2004 07:57:15 -0000 1.137
@@ -43,7 +43,6 @@
#include <linux/smp_lock.h>
#include <linux/pkt_sched.h>
#define __KERNEL_SYSCALLS__
-#include <linux/unistd.h>
#include "drbd.h"
#include "drbd_int.h"
@@ -163,7 +162,7 @@
if( !uptodate ) {
int minor = (int)(mdev-drbd_conf);
if ( mdev->do_panic ) {
- panic(DEVICE_NAME
+ drbd_panic(DEVICE_NAME
"%d: The lower-level device (%d:%d)"
" had an error. bnr=%lu bsz=%u BSZ=%u\n",
minor,
@@ -612,6 +611,11 @@
struct idle_timer_info ti;
int rv;
struct socket *sock = via_msock ? mdev->msock : mdev->sock;
+
+ if (drbd_did_panic) {
+ set_current_state(TASK_ZOMBIE);
+ schedule(); // commit suicide
+ }
msg.msg_control = NULL;
msg.msg_controllen = 0;
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_req-2.4.c,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -3 -r1.39 -r1.40
--- drbd_req-2.4.c 28 Nov 2003 08:32:52 -0000 1.39
+++ drbd_req-2.4.c 28 Apr 2004 07:57:15 -0000 1.40
@@ -112,7 +112,7 @@
req->bh->b_end_io(req->bh,uptodate & req->rq_status);
if( mdev->do_panic && !(uptodate & req->rq_status) ) {
- panic(DEVICE_NAME": The lower-level device had an error.\n");
+ drbd_panic(DEVICE_NAME": The lower-level device had an error.\n");
}
kfree(req); /* frees also the temporary bh */
@@ -140,7 +140,18 @@
int size_kb, bnr, send_ok;
unsigned long flags;
- if(mdev->cstate < StandAlone || MINOR(bh->b_rdev) >= minor_count) {
+ if ( mdev->cstate < StandAlone
+ || mdev->state != Primary
+ || MINOR(bh->b_rdev) >= minor_count
+ || drbd_did_panic )
+ {
+ if (mdev->state != Primary) {
+ printk(KERN_EMERG DEVICE_NAME
+ "%d: not in Primary state, "
+ "failing IO-request [%s/%d]\n",
+ (int)(mdev-drbd_conf),
+ current->comm,current->pid);
+ }
buffer_IO_error(bh);
return 0;
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic