[DRBD-cvs] drbd by phil; Various micro fixes by LGE
drbd-user@lists.linbit.com
drbd-user@lists.linbit.com
Wed, 12 May 2004 12:00:52 +0200 (CEST)
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_main.c
drbd_receiver.c drbd_req-2.4.c
Log Message:
Various micro fixes by LGE
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_compat_wrappers.h,v
retrieving revision 1.1.2.40
retrieving revision 1.1.2.41
diff -u -3 -r1.1.2.40 -r1.1.2.41
--- drbd_compat_wrappers.h 30 Apr 2004 09:46:57 -0000 1.1.2.40
+++ drbd_compat_wrappers.h 12 May 2004 10:00:47 -0000 1.1.2.41
@@ -341,6 +341,8 @@
static inline unsigned short drbd_req_get_size(struct drbd_request *req)
{
+ drbd_dev* mdev = req->private_bio.bi_private;
+ D_ASSERT(req->master_bio->bi_size);
return req->master_bio->bi_size;
}
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_dsender.c,v
retrieving revision 1.1.2.106
retrieving revision 1.1.2.107
diff -u -3 -r1.1.2.106 -r1.1.2.107
--- drbd_dsender.c 11 May 2004 13:14:49 -0000 1.1.2.106
+++ drbd_dsender.c 12 May 2004 10:00:47 -0000 1.1.2.107
@@ -882,11 +882,12 @@
drbd_wait_ee(mdev,&mdev->read_ee);
+ i = 0;
spin_lock_irq(&mdev->req_lock);
+ again:
list_splice_init(&mdev->data.work.q,&work_list);
spin_unlock_irq(&mdev->req_lock);
- i = 0;
while(!list_empty(&work_list)) {
w = list_entry(work_list.next, struct drbd_work,list);
list_del_init(&w->list);
@@ -895,7 +896,8 @@
}
spin_lock_irq(&mdev->req_lock);
- D_ASSERT(list_empty(&mdev->data.work.q));
+ ERR_IF(!list_empty(&mdev->data.work.q))
+ goto again;
sema_init(&mdev->data.work.s,0);
spin_unlock_irq(&mdev->req_lock);
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_int.h,v
retrieving revision 1.58.2.160
retrieving revision 1.58.2.161
diff -u -3 -r1.58.2.160 -r1.58.2.161
--- drbd_int.h 11 May 2004 13:14:49 -0000 1.58.2.160
+++ drbd_int.h 12 May 2004 10:00:47 -0000 1.58.2.161
@@ -164,7 +164,7 @@
// to debug dec_*(), while we still have the <0!! issue
// to debug dec_*(), while we still have the <0!! issue
#include <linux/stringify.h>
-#define HERE __stringify(__FUNCTION__ __LINE__) // __FUNCTION__
+#define HERE __stringify(__FILE__ __LINE__) // __FUNCTION__
#if 1
#define C_DBG(r,x...)
@@ -1194,6 +1194,7 @@
static inline void drbd_set_out_of_sync(drbd_dev* mdev,
sector_t sector, int blk_size)
{
+ D_ASSERT(blk_size);
mdev->rs_total +=
bm_set_bit(mdev, sector, blk_size, SS_OUT_OF_SYNC);
}
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_main.c,v
retrieving revision 1.73.2.170
retrieving revision 1.73.2.171
diff -u -3 -r1.73.2.170 -r1.73.2.171
--- drbd_main.c 11 May 2004 13:14:49 -0000 1.73.2.170
+++ drbd_main.c 12 May 2004 10:00:47 -0000 1.73.2.171
@@ -294,6 +294,8 @@
struct list_head *le,*tle;
struct drbd_barrier *b,*f,*new_first;
struct drbd_request *r;
+ sector_t sector;
+ unsigned int size;
new_first=kmalloc(sizeof(struct drbd_barrier),GFP_KERNEL);
INIT_LIST_HEAD(&new_first->requests);
@@ -314,25 +316,25 @@
while ( b ) {
list_for_each_safe(le, tle, &b->requests) {
r = list_entry(le, struct drbd_request,w.list);
- if( (r->rq_status&0xfffe) != RQ_DRBD_SENT ) {
+ // bi_size and bi_sector are modified in bio_endio!
+ sector = drbd_req_get_sector(r);
+ size = drbd_req_get_size(r);
+ if( !(r->rq_status & RQ_DRBD_SENT) ) {
if(mdev->conf.wire_protocol != DRBD_PROT_A )
dec_ap_pending(mdev,HERE);
- drbd_end_req(r,RQ_DRBD_SENT,ERF_NOTLD|1,
- drbd_req_get_sector(r));
+ drbd_end_req(r,RQ_DRBD_SENT,ERF_NOTLD|1, sector);
goto mark;
}
if(mdev->conf.wire_protocol != DRBD_PROT_C ) {
mark:
- drbd_set_out_of_sync(mdev
- , drbd_req_get_sector(r)
- , drbd_req_get_size(r));
+ drbd_set_out_of_sync(mdev, sector, size);
}
}
f=b;
b=b->next;
list_del(&f->requests);
kfree(f);
- dec_ap_pending(mdev,HERE);
+ dec_ap_pending(mdev,HERE); // for the barrier
}
}
@@ -718,7 +720,8 @@
inc_ap_pending(mdev);
ok = _drbd_send_cmd(mdev,mdev->data.socket,Barrier,(Drbd_Header*)&p,sizeof(p),0);
- if (!ok) dec_ap_pending(mdev,HERE);
+
+// if (!ok) dec_ap_pending(mdev,HERE); // is done in tl_clear()
return ok;
}
@@ -898,7 +901,7 @@
drbd_set_out_of_sync(mdev,
drbd_req_get_sector(req),
drbd_req_get_size(req));
- drbd_end_req(req,RQ_DRBD_SENT,ERF_NOTLD|1,
+ drbd_end_req(req,RQ_DRBD_SENT,ERF_NOTLD|1,
drbd_req_get_sector(req));
}
spin_lock(&mdev->send_task_lock);
@@ -1814,13 +1817,18 @@
int ret=0;
unsigned long flags;
+ if (size <= 0 || (size & 0x1ff) != 0 || size > PAGE_SIZE) {
+ DUMPI(size);
+ return 0;
+ }
+
if(sbm == NULL) {
printk(KERN_ERR DEVICE_NAME"X: No BitMap !?\n");
return 0;
}
if(sector >= sbm->dev_size<<1) return 0;
- if(esector >= sbm->dev_size<<1) esector = (sbm->dev_size<<1) - 1;
+ ERR_IF(esector >= sbm->dev_size<<1) esector = (sbm->dev_size<<1) - 1;
sbnr = sector >> BM_SS;
ebnr = esector >> BM_SS;
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_receiver.c,v
retrieving revision 1.97.2.153
retrieving revision 1.97.2.154
diff -u -3 -r1.97.2.153 -r1.97.2.154
--- drbd_receiver.c 12 May 2004 07:38:16 -0000 1.97.2.153
+++ drbd_receiver.c 12 May 2004 10:00:47 -0000 1.97.2.154
@@ -899,10 +899,10 @@
data_size = h->length - header_size;
/* I expect a block to be a multiple of 512 byte, and
- * no more than 4K (8K). is this too restrictive?
+ * no more than 4K (PAGE_SIZE). is this too restrictive?
*/
ERR_IF(data_size == 0) return FALSE;
- ERR_IF(data_size & 0xff) return FALSE;
+ ERR_IF(data_size & 0x1ff) return FALSE;
ERR_IF(data_size > PAGE_SIZE) return FALSE;
if (drbd_recv(mdev, h->payload, header_size) != header_size)
@@ -936,10 +936,10 @@
data_size = h->length - header_size;
/* I expect a block to be a multiple of 512 byte, and
- * no more than 4K (8K). is this too restrictive?
+ * no more than 4K (PAGE_SIZE). is this too restrictive?
*/
ERR_IF(data_size == 0) return FALSE;
- ERR_IF(data_size & 0xff) return FALSE;
+ ERR_IF(data_size & 0x1ff) return FALSE;
ERR_IF(data_size > PAGE_SIZE) return FALSE;
if (drbd_recv(mdev, h->payload, header_size) != header_size)
@@ -994,10 +994,10 @@
data_size = h->length - header_size;
/* I expect a block to be a multiple of 512 byte, and
- * no more than 4K (8K). is this too restrictive?
+ * no more than 4K (PAGE_SIZE). is this too restrictive?
*/
ERR_IF(data_size == 0) return FALSE;
- ERR_IF(data_size & 0xff) return FALSE;
+ ERR_IF(data_size & 0x1ff) return FALSE;
ERR_IF(data_size > PAGE_SIZE) return FALSE;
if (drbd_recv(mdev, h->payload, header_size) != header_size)
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_req-2.4.c,v
retrieving revision 1.33.2.74
retrieving revision 1.33.2.75
diff -u -3 -r1.33.2.74 -r1.33.2.75
--- drbd_req-2.4.c 7 May 2004 15:18:28 -0000 1.33.2.74
+++ drbd_req-2.4.c 12 May 2004 10:00:47 -0000 1.33.2.75
@@ -282,10 +282,11 @@
if (!drbd_send_dblock(mdev,req)) {
if (mdev->cstate >= Connected)
set_cstate(mdev,NetworkFailure);
- drbd_thread_restart_nowait(&mdev->receiver);
dec_ap_pending(mdev,HERE);
+ drbd_thread_restart_nowait(&mdev->receiver);
} else if(mdev->conf.wire_protocol == DRBD_PROT_A) {
dec_ap_pending(mdev,HERE);
+ drbd_end_req(req, RQ_DRBD_SENT, 1, sector);
}
} else if (target_area_out_of_sync) {
drbd_read_remote(mdev,req);