[DRBD-user] Resized the Raid....

Lars Ellenberg Lars.Ellenberg at linbit.com
Tue Apr 19 11:47:00 CEST 2005

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


/ 2005-04-19 02:03:33 -0500
\ David A. Smith:
> Needed to replace the Disks in a Raid.  Total size ended up being
> smaller....so when i try to RE Initialize the drives the drbdsetup
> crashes on me.  Im assuming there needs to be some sort of Cleaning of
> what the System THINKS the drive should be?
> 
> drbdsetup /dev/drbd0 disk /dev/md0 internal -1
> 
> 
> drbd0: BM resizing failed. Leaving size unchanged at size = 2556165888 KB
> drbd0: Assuming that all blocks are out of sync (aka FullSync)
> drbd0: drbd_bm_set_all: (!(b && b->bm)) in drivers/block/drbd/drbd_bitmap.c:553
> Call Trace:
> .drbd_bm_set_all+0x1b4/0x1bc [drbd]
> .drbd_ioctl_set_disk+0x824/0x8c4 [drbd]
> .drbd_ioctl+0x10d4/0x1754 [drbd]
> .blkdev_ioctl+0xd4/0xa1c
> .block_ioctl+0x28/0x40
> .sys_ioctl+0x314/0x4dc
> .compat_sys_ioctl+0x130/0x398
> syscall_exit+0x0/0x18

At that point, b and b->bm are pointers, b points to the bitmap struct,
which contains some housekeeping fields and the bm member, which points
to the actual bitmap.  One of them (looking at the code path, obviously
b->bm) is NULL, i.e. points nowhere. Which means somewhen we had
not enough memory to allocate enough room for it.
Which is an unlikely code path, and was not exercised much in testing.

So you found a bug, which I thought we had fixed long ago.
If there is not enough memory to allocate the bitmap,
it bugs during drbdsetup disk.
And it does not even give a useful error message.
The BUG is easy to remove, but it would leave you with a drbd device
with effective size 0, and I won't bet on code stability with no drbd
device size: we never tested whether it would work with no data at all.

So the right thing to do is fail the setup with ENOMEM.
Which is not as easy to fix as one might think, because the disk setup
code is currently that convoluted and bitmap allocation happens at a
point where it is difficult to undo changes. Some of the ioctls need to
be rewriten.


	Lars Ellenberg

-- 
please use the "List-Reply" function of your email client.



More information about the drbd-user mailing list