[DRBD-cvs] r1575 - branches/drbd-0.7/drbd

svn at svn.drbd.org svn at svn.drbd.org
Fri Oct 1 10:15:20 CEST 2004


Author: phil
Date: 2004-10-01 10:15:17 +0200 (Fri, 01 Oct 2004)
New Revision: 1575

Modified:
   branches/drbd-0.7/drbd/drbd_worker.c
Log:
* A bugfix for a very unlikely race that could cause a 
  read on a Primary/SyncTarget node to return invalid
  data.
* This was pointed out by an ASSERTION in drbd_put_ee()
  and Benoit Ropartz who patiently reportet that this
  ASSERTION triggered in his tests.


Modified: branches/drbd-0.7/drbd/drbd_worker.c
===================================================================
--- branches/drbd-0.7/drbd/drbd_worker.c	2004-09-30 14:06:32 UTC (rev 1574)
+++ branches/drbd-0.7/drbd/drbd_worker.c	2004-10-01 08:15:17 UTC (rev 1575)
@@ -585,7 +585,12 @@
 	dec_unacked(mdev,HERE);
 
 	spin_lock_irq(&mdev->ee_lock);
-	drbd_put_ee(mdev,e);
+	if( page_count(drbd_bio_get_page(&e->private_bio)) > 1 ) {
+		/* This might happen if sendpage() has not finished */
+		list_add_tail(&e->w.list,&mdev->net_ee);
+	} else {
+		drbd_put_ee(mdev,e);
+	}
 	spin_unlock_irq(&mdev->ee_lock);
 
 	if(unlikely(!ok)) ERR("drbd_send_block() failed\n");



More information about the drbd-cvs mailing list