[DRBD-cvs] r1876 - in branches/drbd-0.7: drbd testing/CTH

www-data www-data at linbit.com
Thu Jul 14 16:40:28 CEST 2005


Author: lars
Date: 2005-07-14 16:40:26 +0200 (Thu, 14 Jul 2005)
New Revision: 1876

Modified:
   branches/drbd-0.7/drbd/drbd_bitmap.c
   branches/drbd-0.7/drbd/drbd_fs.c
   branches/drbd-0.7/drbd/drbd_int.h
   branches/drbd-0.7/drbd/drbd_main.c
   branches/drbd-0.7/testing/CTH/CTH_bash.helpers
   branches/drbd-0.7/testing/CTH/functions.sh
Log:

* handle out of memory condition in do_determin_dev_size slightly more gracefully

* some adjustments to the CTH,
  on startup, it first attaches all devices,
  only then it connects
  on large/many devices it would otherwise trigger timeouts more likely,
  since we still read/write the bitmap synchronous.




Modified: branches/drbd-0.7/drbd/drbd_bitmap.c
===================================================================
--- branches/drbd-0.7/drbd/drbd_bitmap.c	2005-07-14 13:29:24 UTC (rev 1875)
+++ branches/drbd-0.7/drbd/drbd_bitmap.c	2005-07-14 14:40:26 UTC (rev 1876)
@@ -273,6 +273,12 @@
 	return 0;
 }
 
+sector_t drbd_bm_capacity(drbd_dev *mdev)
+{
+	ERR_IF(!mdev->bitmap) return 0;
+	return mdev->bitmap->bm_dev_capacity;
+}
+
 /* called on driver unload. TODO: call when a device is destroyed.
  */
 void drbd_bm_cleanup(drbd_dev *mdev)

Modified: branches/drbd-0.7/drbd/drbd_fs.c
===================================================================
--- branches/drbd-0.7/drbd/drbd_fs.c	2005-07-14 13:29:24 UTC (rev 1875)
+++ branches/drbd-0.7/drbd/drbd_fs.c	2005-07-14 14:40:26 UTC (rev 1876)
@@ -182,16 +182,23 @@
 		int err;
 		err = drbd_bm_resize(mdev,size<<1); // wants sectors
 		if (unlikely(err)) {
-			ERR("BM resizing failed. "
-			    "Leaving size unchanged at size = %lu KB\n", 
-			    (unsigned long)size);
-		} else {
-			// racy, see comments above.
-			drbd_set_my_capacity(mdev,size<<1);
-			mdev->la_size = size;
-			INFO("size = %s (%lu KB)\n",ppsize(ppb,size),
-			     (unsigned long)size);
+			/* currently there is only one error: ENOMEM! */
+			size = drbd_bm_capacity(mdev)>>1;
+			if (size == 0) {
+				ERR("Could not allocate bitmap! Set device size => 0\n");
+			} else {
+				/* FIXME this is problematic,
+				 * if we in fact are smaller now! */
+				ERR("BM resizing failed. "
+				    "Leaving size unchanged at size = %lu KB\n", 
+				    (unsigned long)size);
+			}
 		}
+		// racy, see comments above.
+		drbd_set_my_capacity(mdev,size<<1);
+		mdev->la_size = size;
+		INFO("size = %s (%lu KB)\n",ppsize(ppb,size),
+		     (unsigned long)size);
 	}
 
 	return rv;
@@ -474,6 +481,7 @@
 	drbd_determin_dev_size(mdev);
 	/* FIXME
 	 * what if we now have la_size == 0 ?? eh?
+	 * BOOM?
 	 */
 
 	if (md_gc_valid <= 0) {

Modified: branches/drbd-0.7/drbd/drbd_int.h
===================================================================
--- branches/drbd-0.7/drbd/drbd_int.h	2005-07-14 13:29:24 UTC (rev 1875)
+++ branches/drbd-0.7/drbd/drbd_int.h	2005-07-14 14:40:26 UTC (rev 1876)
@@ -1003,6 +1003,7 @@
 extern void drbd_bm_write     (drbd_dev *mdev);
 extern unsigned long drbd_bm_ALe_set_all (drbd_dev *mdev, unsigned long al_enr);
 extern size_t        drbd_bm_words       (drbd_dev *mdev);
+extern sector_t      drbd_bm_capacity    (drbd_dev *mdev);
 extern unsigned long drbd_bm_find_next   (drbd_dev *mdev);
 extern unsigned long drbd_bm_total_weight(drbd_dev *mdev);
 extern int drbd_bm_rs_done(drbd_dev *mdev);

Modified: branches/drbd-0.7/drbd/drbd_main.c
===================================================================
--- branches/drbd-0.7/drbd/drbd_main.c	2005-07-14 13:29:24 UTC (rev 1875)
+++ branches/drbd-0.7/drbd/drbd_main.c	2005-07-14 14:40:26 UTC (rev 1876)
@@ -1692,6 +1692,7 @@
 	int i,err;
 
 #if 0
+#warning "DEBUGGING"
 /* I am too lazy to calculate this by hand	-lge
  */
 #define SZO(x) printk(KERN_ERR "sizeof(" #x ") = %d\n", sizeof(x))

Modified: branches/drbd-0.7/testing/CTH/CTH_bash.helpers
===================================================================
--- branches/drbd-0.7/testing/CTH/CTH_bash.helpers	2005-07-14 13:29:24 UTC (rev 1875)
+++ branches/drbd-0.7/testing/CTH/CTH_bash.helpers	2005-07-14 14:40:26 UTC (rev 1876)
@@ -321,7 +321,7 @@
 	# configure all dm disks
 	for d in ${!Disk_*} ; do Heal_Disk $d ; done
 
-	# reset and up all DRBDs
+	# reset and attach all DRBDs
 	for d in ${!Drbd_*} ; do
 		drbd_to_env $d
 		echo "$conf" | on ${!left}:  drbd_append_config USIZE=$USIZE \
@@ -332,6 +332,13 @@
 			START_CLEAN=$DRBD_SKIP_INITIAL_SYNC
 	done
 
+	# configure syncer and network
+	for d in ${!Drbd_*} ; do
+		drbd_to_env $d
+		on ${!left}:  drbdadm_adjust name=$name
+		on ${!right}:  drbdadm_adjust name=$name
+	done
+
 	# wait for connect and initial sync (which should be skipped automatically)
 	for d in ${!Drbd_*} ; do
 		drbd_to_env $d

Modified: branches/drbd-0.7/testing/CTH/functions.sh
===================================================================
--- branches/drbd-0.7/testing/CTH/functions.sh	2005-07-14 13:29:24 UTC (rev 1875)
+++ branches/drbd-0.7/testing/CTH/functions.sh	2005-07-14 14:40:26 UTC (rev 1876)
@@ -104,7 +104,7 @@
 	local cmd=`type $2|tail +2`
 	local env="\
 set -o errexit $DEBUG
-PATH=/root/bin:/usr/bin:/bin:/usr/sbin:/sbin
+PATH=/root/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/bin:/bin
 $(printf '%q\n' "${@:3}")
 "
 	local err
@@ -339,11 +339,19 @@
 	fi
 	sync
 	echo .
-	drbdadm up $RES
+	drbdadm attach $RES
 	# cat /proc/drbd
-	echo "up'ed drbd $RES on $HOSTNAME"
+	echo "attached drbd $RES on $HOSTNAME"
 }
 
+drbdadm_adjust()							# {{{3
+{
+	: ${name:?unknown resource name} 
+	drbdadm adjust $name
+	# cat /proc/drbd
+	echo "adjusted drbd $name on $HOSTNAME"
+}
+
 drbdadm_up()								# {{{3
 {
 	: ${name:?unknown resource name} 



More information about the drbd-cvs mailing list