[DRBD-cvs] drbd by lars; avoid al_extent == 0

drbd-user@lists.linbit.com drbd-user@lists.linbit.com
Wed, 19 May 2004 21:52:52 +0200 (CEST)


DRBD CVS committal

Author  : lars
Module  : drbd

Dir     : drbd/drbd


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


Log Message:
avoid al_extent == 0
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_fs.c,v
retrieving revision 1.28.2.94
retrieving revision 1.28.2.95
diff -u -3 -r1.28.2.94 -r1.28.2.95
--- drbd_fs.c	19 May 2004 16:58:08 -0000	1.28.2.94
+++ drbd_fs.c	19 May 2004 19:52:47 -0000	1.28.2.95
@@ -340,13 +340,20 @@
 		drbd_write_bm(mdev);
 	}
 
+	D_ASSERT(mdev->sync_conf.al_extents >= 7);
+
 	if ( !mdev->act_log ||
 	     mdev->act_log->nr_elements != mdev->sync_conf.al_extents )
 	{
 		struct lru_cache *n,*t;
 		n = lc_alloc(mdev->sync_conf.al_extents,
 			     sizeof(struct lc_element), mdev);
-		// FIXME if (n==NULL) scream out loud ...
+		ERR_IF (n==NULL) {
+			/* FIXME
+			 * allocation failed.
+			 * how do we cleanup this mess now?
+			 */
+		}
 		// FIXME if (still_in_use) BUG();
 		spin_lock_irq(&mdev->al_lock);
 		t = mdev->act_log;
@@ -658,6 +665,11 @@
 	struct syncer_config sc;
 
 	if(copy_from_user(&sc,&arg->config,sizeof(sc))) return -EFAULT;
+
+	sc.use_csums = 0; // TODO, NYI
+	ERR_IF (sc.rate < 1) sc.rate = 1;
+	ERR_IF (sc.skip & ~1) sc.skip = !!sc.skip;
+	ERR_IF (sc.al_extents < 7) sc.al_extents = 127; // arbitrary minimum
 
 	mdev->sync_conf.rate       = sc.rate;
 	mdev->sync_conf.use_csums  = sc.use_csums;
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_main.c,v
retrieving revision 1.73.2.179
retrieving revision 1.73.2.180
diff -u -3 -r1.73.2.179 -r1.73.2.180
--- drbd_main.c	19 May 2004 16:58:09 -0000	1.73.2.179
+++ drbd_main.c	19 May 2004 19:52:47 -0000	1.73.2.180
@@ -1621,6 +1621,8 @@
 		drbd_dev    *mdev = &drbd_conf[i];
 		struct page *page = alloc_page(GFP_KERNEL);
 
+		drbd_init_set_defaults(mdev);
+
 NOT_IN_26(
 		drbd_blocksizes[i] = INITIAL_BLOCK_SIZE;
 		mdev->this_bdev = MKDEV(MAJOR_NR, i);
@@ -1639,7 +1641,6 @@
 					 sizeof(struct lc_element), mdev);
 		if (!mdev->act_log) goto Enomem;
 
-		drbd_init_set_defaults(mdev);
 		init_MUTEX(&mdev->device_mutex);
 		if (!tl_init(mdev)) goto Enomem;
 		if (!drbd_init_ee(mdev)) goto Enomem;
@@ -2216,6 +2217,8 @@
 		mdev->gen_cnt[i]=be32_to_cpu(buffer->gc[i]);
 	mdev->la_size = be64_to_cpu(buffer->la_size);
 	mdev->sync_conf.al_extents = be32_to_cpu(buffer->al_nr_extents);
+	if (mdev->sync_conf.al_extents < 7)
+		mdev->sync_conf.al_extents = 127;
 
 	up(&mdev->md_io_mutex);
 	dec_local(mdev);
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/lru_cache.c,v
retrieving revision 1.1.2.25
retrieving revision 1.1.2.26
diff -u -3 -r1.1.2.25 -r1.1.2.26
--- lru_cache.c	3 May 2004 15:00:33 -0000	1.1.2.25
+++ lru_cache.c	19 May 2004 19:52:47 -0000	1.1.2.26
@@ -49,6 +49,7 @@
 	struct lc_element *e;
 	int i;
 
+	BUG_ON(!e_count);
 	e_size = max(sizeof(struct lc_element),e_size);
 	bytes  = e_size+sizeof(struct hlist_head);
 	bytes *= e_count;