[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