[DRBD-user] DRBD - on ARM (armel)

Lars Ellenberg lars.ellenberg at linbit.com
Wed Jun 10 13:38:32 CEST 2009

Note: "permalinks" may not be as permanent as we would like,
direct links of old sources may well be a few messages off.


On Wed, Jun 10, 2009 at 09:58:01AM +0100, Nick wrote:
> Hi,
> 
> I am a new user to DRBD, and currently not getting very far with it,
> primarily I believe because of the hardware platform I am running on.
> 
> This is an ARM (armel - little endian) platform, with only
> 128MB of RAM in total. I have tried this with top showing 30 megs free, 
> and 60 megs cached:
> 
> nasty:~# vmstat
> procs -----------memory---------- ---swap-- -----io---- -system-- 
> ----cpu----
>  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy 
> id wa
>  0  0   1524  27248   4940  60736   12   13   141    95   68   75  4  2 
> 94  0
> 
> 
> I am running a custom 2.6.29 kernel, and have tried the drbd 8.3.1 and
> 8.3.2rc1 packages, built against my kernel. The userland tools are the
> stock 8.3.1 debian tools from the debian armel build.
> 
> Currently, as I am testing I am using a 100M loopback image on both
> systems, as the underlying storage. Perhaps this is the problem, but I
> am loathed to re-partition my disks at this stage..
> 
> One system is i386 (no shortage of RAM here), which seems to behave
> correctly. Both running same version of kernel and DRBD.
> I don't think its getting as far as even attempting to communicate with 
> the other system, however I
> mention it because, it works fine with the configuration I am using, on 
> the i386.
> 
> 
> I have a very simple configuration:
> 
> global {
>     usage-count yes;
> }
> 
> common {
>     protocol C;
> }
> 
> resource r0 {
>   device     /dev/drbd0;
>   disk       /dev/loop0;
>   meta-disk  internal;
> 
>   on nasty {
>     address   192.168.0.1:7788;
>   }
> 
>   on acid {
>     address   192.168.0.2:7788;
>   }
> }
> 
> 
> Loading the drbd driver seems fine:
> 
> -----------
> kernel: drbd: initialised. Version: 8.3.1 (api:88/proto:86-89)
> kernel: drbd: GIT-hash: fd40f4a8f9104941537d1afc8521e584a6d3003c build
> by root at acid, 2009-06-09 23:39:13
> kernel: drbd: registered as block device major 147
> kernel: drbd: minor_table @ 0xc58dca20
> ----------
> 
> I am able to initialise the device metadata:
> 
> 
> nasty:~# drbdadm create-md r0
> Writing meta data...
> initializing activity log
> NOT initialized bitmap
> New drbd meta data block successfully created.
> success
> 
> However when I try to attach to the device:
> 
> nasty:~# drbdadm attach r0
> No response from the DRBD driver! Is the module loaded?
> Bad: fgets returned NULL while waiting for data: Interrupted system call
> 
> 
> Looking in /var/log/kern.log
> 
> ------------
> kernel: drbd0: Unknown tag: 1071

THAT is the real problem.


> kernel: Unable to handle kernel NULL pointer dereference at virtual 
> address 00000015

and this is "only" an unexercised error path ;)

commit 3ca9b9285de9db7ce0be384e28675f81c0bfba20
Author: Lars Ellenberg <lars.ellenberg at linbit.com>
Date:   Wed Jun 10 13:31:04 2009 +0200

    don't dereference uninitialized pointers

diff --git a/drbd/drbd_nl.c b/drbd/drbd_nl.c
index 922ddb1..73dd439 100644
--- a/drbd/drbd_nl.c
+++ b/drbd/drbd_nl.c
@@ -781,14 +781,12 @@ STATIC int drbd_nl_disk_conf(struct drbd_conf *mdev, struct drbd_nl_cfg_req *nlp
 	}
 
 	/* allocation not in the IO path, cqueue thread context */
-	nbc = kmalloc(sizeof(struct drbd_backing_dev), GFP_KERNEL);
+	nbc = kzalloc(sizeof(struct drbd_backing_dev), GFP_KERNEL);
 	if (!nbc) {
 		retcode = ERR_NOMEM;
 		goto fail;
 	}
 
-	memset(&nbc->md, 0, sizeof(struct drbd_md));
-	memset(&nbc->dc, 0, sizeof(struct disk_conf));
 	nbc->dc.disk_size     = DRBD_DISK_SIZE_SECT_DEF;
 	nbc->dc.on_io_error   = DRBD_ON_IO_ERROR_DEF;
 	nbc->dc.fencing       = DRBD_FENCING_DEF;
@@ -799,9 +797,6 @@ STATIC int drbd_nl_disk_conf(struct drbd_conf *mdev, struct drbd_nl_cfg_req *nlp
 		goto fail;
 	}
 
-	nbc->lo_file = NULL;
-	nbc->md_file = NULL;
-
 	if (nbc->dc.meta_dev_idx < DRBD_MD_INDEX_FLEX_INT) {
 		retcode = ERR_MD_IDX_INVALID;
 		goto fail;

-- 
: Lars Ellenberg
: LINBIT | Your Way to High Availability
: DRBD/HA support and consulting http://www.linbit.com

DRBD® and LINBIT® are registered trademarks of LINBIT, Austria.
__
please don't Cc me, but send to list   --   I'm subscribed



More information about the drbd-user mailing list