[DRBD-cvs] drbd by phil; [parch by LGE] Fixed the some (hopefully...

drbd-user@lists.linbit.com drbd-user@lists.linbit.com
Mon, 10 May 2004 11:13:04 +0200 (CEST)


DRBD CVS committal

Author  : phil
Module  : drbd

Dir     : drbd/drbd


Modified Files:
      Tag: rel-0_7-branch
	drbd_main.c 


Log Message:
[parch by LGE]
Fixed the some (hopefully the last) issues with tl_cancel() and drbd_sebd_dblock()

===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_main.c,v
retrieving revision 1.73.2.167
retrieving revision 1.73.2.168
diff -u -3 -r1.73.2.167 -r1.73.2.168
--- drbd_main.c	7 May 2004 15:18:28 -0000	1.73.2.167
+++ drbd_main.c	10 May 2004 09:12:59 -0000	1.73.2.168
@@ -191,6 +191,7 @@
 	b=mdev->newest_barrier;
 
 	new_item->barrier = b;
+	new_item->rq_status |= RQ_DRBD_IN_TL;
 	list_add(&new_item->w.list,&b->requests);
 
 	if( b->n_req++ > mdev->conf.max_epoch_size ) {
@@ -213,10 +214,6 @@
 	item->rq_status &= ~RQ_DRBD_IN_TL;
 
 	spin_unlock_irq(&mdev->tl_lock);
-	drbd_end_req(item,RQ_DRBD_SENT,ERF_NOTLD|1, drbd_req_get_sector(item));
-	drbd_set_out_of_sync(mdev,
-			     drbd_req_get_sector(item),
-			     drbd_req_get_size(item));
 }
 
 STATIC unsigned int tl_add_barrier(drbd_dev *mdev)
@@ -785,6 +782,7 @@
 
 	drop_it =   mdev->meta.socket == sock
 		|| !mdev->asender.task
+		|| get_t_state(&mdev->asender) != Running
 		|| (volatile int)mdev->cstate < Connected;
 
 	if (drop_it)
@@ -891,14 +889,17 @@
 		ok = _drbd_send_barrier(mdev);
 	if(ok) {
 		tl_add(mdev,req);
-		req->rq_status |= RQ_DRBD_IN_TL;
-
 		ok = (drbd_send(mdev,mdev->data.socket,&p,sizeof(p),MSG_MORE) == sizeof(p));
 		if(ok) {
 			ok = _drbd_send_zc_bio(mdev,&req->private_bio);
 		}
 		if(!ok) tl_cancel(mdev,req);
-
+	}
+	if (!ok) {
+		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_req_get_sector(item));
 	}
 	spin_lock(&mdev->send_task_lock);
 	mdev->send_task=NULL;