[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;