[DRBD-cvs] drbd by phil; [patch by LGE] * Use flush_signals() * B...

drbd-user@lists.linbit.com drbd-user@lists.linbit.com
Sun, 7 Mar 2004 12:49:28 +0100 (CET)


DRBD CVS committal

Author  : phil
Module  : drbd

Dir     : drbd/drbd


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


Log Message:
[patch by LGE]
 * Use flush_signals()
 * Be more verbous if something strange happens in drbdd_init()

===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_compat_wrappers.h,v
retrieving revision 1.1.2.32
retrieving revision 1.1.2.33
diff -u -3 -r1.1.2.32 -r1.1.2.33
--- drbd_compat_wrappers.h	7 Mar 2004 08:46:37 -0000	1.1.2.32
+++ drbd_compat_wrappers.h	7 Mar 2004 11:49:23 -0000	1.1.2.33
@@ -17,7 +17,7 @@
  */
 
 /* Returns the number of 512 byte sectors of the device */
-static inline sector_t long drbd_get_capacity(kdev_t dev)
+static inline sector_t drbd_get_capacity(kdev_t dev)
 {
 	return dev ? blk_size[MAJOR(dev)][MINOR(dev)]<<1 : 0;
 }
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_dsender.c,v
retrieving revision 1.1.2.80
retrieving revision 1.1.2.81
diff -u -3 -r1.1.2.80 -r1.1.2.81
--- drbd_dsender.c	6 Mar 2004 08:45:28 -0000	1.1.2.80
+++ drbd_dsender.c	7 Mar 2004 11:49:23 -0000	1.1.2.81
@@ -722,7 +722,6 @@
 {
 	drbd_dev *mdev = thi->mdev;
 	struct drbd_work *w;
-	unsigned long flags;
 	int intr;
 
 	sprintf(current->comm, "drbd%d_worker", (int)(mdev-drbd_conf));
@@ -735,10 +734,7 @@
 
 		if (intr) {
 			D_ASSERT(intr == -EINTR);
-			LOCK_SIGMASK(current,flags);
-			sigemptyset(&current->pending.signal);
-			RECALC_SIGPENDING(current);
-			UNLOCK_SIGMASK(current,flags);
+			drbd_flush_signals(current);
 			if (thi->t_state != Running )
 				break;
 			continue;
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_int.h,v
retrieving revision 1.58.2.133
retrieving revision 1.58.2.134
diff -u -3 -r1.58.2.133 -r1.58.2.134
--- drbd_int.h	7 Mar 2004 08:46:37 -0000	1.58.2.133
+++ drbd_int.h	7 Mar 2004 11:49:23 -0000	1.58.2.134
@@ -938,6 +938,18 @@
 
 #include "drbd_compat_wrappers.h"
 
+static inline void
+drbd_flush_signals(struct task_struct *t)
+{
+	NOT_IN_26(
+	unsigned long flags;
+	LOCK_SIGMASK(t,flags);
+	)
+
+	flush_signals(t);
+	NOT_IN_26(UNLOCK_SIGMASK(t,flags));
+}
+
 static inline void set_cstate(drbd_dev* mdev,Drbd_CState ns)
 {
 	unsigned long flags;
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_receiver.c,v
retrieving revision 1.97.2.119
retrieving revision 1.97.2.120
diff -u -3 -r1.97.2.119 -r1.97.2.120
--- drbd_receiver.c	6 Mar 2004 18:25:07 -0000	1.97.2.119
+++ drbd_receiver.c	7 Mar 2004 11:49:23 -0000	1.97.2.120
@@ -598,12 +598,7 @@
 		}
 		if(mdev->cstate==Unconnected) return 0;
 		if(signal_pending(current)) {
-			unsigned long flags;
-			LOCK_SIGMASK(current,flags);
-			sigemptyset(&current->pending.signal);
-			RECALC_SIGPENDING(current);
-			UNLOCK_SIGMASK(current,flags);
-
+			drbd_flush_signals(current);
 			smp_mb();
 			if ((volatile int)mdev->receiver.t_state != Running)
 				return 0;
@@ -1601,14 +1596,14 @@
 		drbdd(mdev);
 		drbd_disconnect(mdev);
 		if (thi->t_state == Exiting) break;
-		if (thi->t_state == Restarting) {
-			unsigned long flags;
+		else {
+			if (signal_pending(current)) {
+				drbd_flush_signals(current);
+				if (thi->t_state != Restarting)
+					ERR("unexpected thread state: %d\n",
+					    thi->t_state);
+			}
 			thi->t_state = Running;
-
-			LOCK_SIGMASK(current,flags);
-			sigemptyset(&current->pending.signal);
-			RECALC_SIGPENDING(current);
-			UNLOCK_SIGMASK(current,flags);
 		}
 	}
 
@@ -1744,7 +1739,6 @@
 	drbd_dev *mdev = thi->mdev;
 	Drbd_Header *h = &mdev->meta.rbuf.head;
 
-	unsigned long flags = 0;
 	int rv,len;
 	void *buf    = h;
 	int received = 0;
@@ -1808,10 +1802,7 @@
 			set_bit(SEND_PING,&mdev->flags);
 			continue;
 		} else if (rv == -EINTR) {
-			LOCK_SIGMASK(current,flags);
-			sigemptyset(&current->pending.signal);
-			RECALC_SIGPENDING(current);
-			UNLOCK_SIGMASK(current,flags);
+			drbd_flush_signals(current);
 			// Do something on signal ??
 			continue;
 		} else {