[DRBD-cvs] drbd by phil; Lars Ellenberg's last minute patch befor...

drbd-user@lists.linbit.com drbd-user@lists.linbit.com
Sun, 8 Feb 2004 20:40:02 +0100 (CET)


DRBD CVS committal

Author  : phil
Module  : drbd

Dir     : drbd/drbd


Modified Files:
	Makefile drbd_receiver.c drbd_syncer.c 


Log Message:
Lars Ellenberg's last minute patch before 0.6.11 depatures.

===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Makefile,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -3 -r1.28 -r1.29
--- Makefile	6 Feb 2004 08:50:14 -0000	1.28
+++ Makefile	8 Feb 2004 19:39:57 -0000	1.29
@@ -108,7 +108,7 @@
           test -L "$(KDIR)" && echo "	alias"   &&           \
 	  echo "#  $$(readlink $(KDIR))/.config" || echo "" ; \
 	  echo -e "# follows\n#\n"                             ; \
-	  cat $(KDIR)/.config ; } | gzip > kernel.config.gz
+	  cat $(KDIR)/.config ; } | gzip > .kernel.config.gz
 	@echo "done."
 
   dep: greeting
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_receiver.c,v
retrieving revision 1.133
retrieving revision 1.134
diff -u -3 -r1.133 -r1.134
--- drbd_receiver.c	18 Dec 2003 19:18:08 -0000	1.133
+++ drbd_receiver.c	8 Feb 2004 19:39:57 -0000	1.134
@@ -1208,6 +1208,16 @@
 	}
 }
 
+inline void
+drbd_header_error(int minor,Drbd_Packet *h, const char *s)
+{
+	printk( KERN_ERR DEVICE_NAME "%d: %s %08x:%04x:%04x\n",
+		minor, s,
+		be32_to_cpu(h->magic),
+		be16_to_cpu(h->command),
+		be16_to_cpu(h->length)  );
+}
+
 void drbdd(int minor)
 {
 	Drbd_Packet header;
@@ -1222,19 +1232,13 @@
 					  &drbd_conf[minor].flags);
 			}
 		}
+		header.magic = 0;
 		if (drbd_recv(drbd_conf+minor,&header,sizeof(Drbd_Packet),0)
 		    != sizeof(Drbd_Packet))
 			break;
 
 		if (be32_to_cpu(header.magic) != DRBD_MAGIC) {
-			printk(KERN_ERR DEVICE_NAME "%d: magic?? m: %ld "
-			       "c: %d "
-			       "l: %d \n",
-			       minor,
-			       (long) be32_to_cpu(header.magic),
-			       (int) be16_to_cpu(header.command),
-			       (int) be16_to_cpu(header.length));
-
+			drbd_header_error(minor,&header,"magic??");
 			break;
 		}
 		switch (be16_to_cpu(header.command)) {
@@ -1290,8 +1294,7 @@
 			break;
 
 		default:            /* both, should NEVER happen */
-			printk(KERN_ERR DEVICE_NAME
-			       "%d: unknown packet type!\n", minor);
+			drbd_header_error(minor,&header,"unknown packet type!");
 			goto out;
 		}
 	}
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_syncer.c,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -3 -r1.36 -r1.37
--- drbd_syncer.c	18 Dec 2003 17:55:21 -0000	1.36
+++ drbd_syncer.c	8 Feb 2004 19:39:57 -0000	1.37
@@ -266,17 +266,17 @@
 	return pending;
 }
 
-STATIC inline void ds_buffer_done(struct ds_buffer *this,int minor)
+STATIC inline void ds_buffer_done(struct Drbd_Conf *mdev, struct ds_buffer *this)
 {
 	int i,pending=this->io_pending_number;
 
 	this->io_pending_number=0;
 	for(i=0;i<pending;i++) {
-		bb_done(drbd_conf+minor,this->blnr[i]);
+		bb_done(mdev,this->blnr[i]);
 	}
 }
 
-STATIC int ds_buffer_send(struct ds_buffer *this,int minor)
+STATIC int ds_buffer_send(struct Drbd_Conf *mdev, struct ds_buffer *this)
 {
 	int i,blocksize,rr,rv=TRUE;
 	int pending=this->io_pending_number;
@@ -285,7 +285,16 @@
 	blocksize = this->b_size >> 10;
 
 	for(i=0;i<pending;i++) {
-		rr=drbd_send_block(&drbd_conf[minor],this->bhs[i],ID_SYNCER);
+		/* maybe someone has drbd_thread_stop_nowait()ed us.
+		 * drbd_send_block won't notice (DRBD_SIG != DRBD_SIGKILL),
+		 * and we'd need to wait for timeout...
+		 * XXX maybe check for == DRBD_SIGKILL
+		 */
+		if (mdev->syncer.t_state != Running) {
+			rv=FALSE;
+			break;
+		}
+		rr=drbd_send_block(mdev,this->bhs[i],ID_SYNCER);
 
 		if(rr < blocksize) {
 			rv=FALSE;
@@ -293,9 +302,9 @@
 		}
 	}
 
-	spin_lock_irqsave(&drbd_conf[minor].bb_lock,flags);
-	ds_buffer_done(this,minor);
-	spin_unlock_irqrestore(&drbd_conf[minor].bb_lock,flags);
+	spin_lock_irqsave(&mdev->bb_lock,flags);
+	ds_buffer_done(mdev,this);
+	spin_unlock_irqrestore(&mdev->bb_lock,flags);
 
 	return rv;
 }
@@ -520,13 +529,13 @@
 		}
 		swap(disk_b,net_b);
 		if(thi->t_state == Exiting) {
-			ds_buffer_send(net_b,minor);
+			ds_buffer_send(mdev,net_b);
 			printk(KERN_ERR DEVICE_NAME
 			       "%d: Syncer aborted.\n",minor);
 			goto err;
 		}
 		ds_buffer_read(disk_b,get_blk,id,minor);
-		if(!ds_buffer_send(net_b,minor)) {
+		if(!ds_buffer_send(mdev,net_b)) {
 			ds_buffer_wait_on(disk_b,minor);
 			printk(KERN_ERR DEVICE_NAME
 			       "%d: Syncer send failed.\n",minor);
@@ -542,17 +551,17 @@
 	printk(KERN_INFO DEVICE_NAME "%d: Synchronisation done.\n",minor);
 
  err:
-	if(drbd_conf[minor].cstate == SyncingAll ||
-	   drbd_conf[minor].cstate == SyncingQuick) {
-		set_cstate(&drbd_conf[minor],Connected);
-		drbd_send_cstate(&drbd_conf[minor]);
+	if(mdev->cstate == SyncingAll ||
+	   mdev->cstate == SyncingQuick) {
+		set_cstate(mdev,Connected);
+		drbd_send_cstate(mdev);
 	}
 
-	spin_lock_irqsave(&drbd_conf[minor].bb_lock,flags);
-	drbd_conf[minor].syncer_b = 0;
-	ds_buffer_done(disk_b,minor);
-	ds_buffer_done(net_b,minor);
-	spin_unlock_irqrestore(&drbd_conf[minor].bb_lock,flags);
+	spin_lock_irqsave(&mdev->bb_lock,flags);
+	mdev->syncer_b = 0;
+	ds_buffer_done(mdev,disk_b);
+	ds_buffer_done(mdev,net_b);
+	spin_unlock_irqrestore(&mdev->bb_lock,flags);
 
 	ds_buffer_free(&buffers[0]);
 	ds_buffer_free(&buffers[1]);