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