ChangeLog last updated: r1730 2005-01-25
Cumulative changes since last tarball.
For even more detail, use "svn log" and "svn diff".
* 0.7.9 had a memory corruption bug and memory leakage (BIOs).
This time I did the clone_bio() fix myself, and this release is
supposed to work with SLES9 SP1, Linux-2.6.11 and Linux-2.6.12.
* A fix that makes DRBD work on SLES9 SP1 kernel, and
probabely will be also necessary for Linux-2.6.11
* Fixed a bug that caused the syncer to starve on devices
bigger than 2 TB on 32bit systems (=CONFIG_LBA).
* Made online resizing actually work. Now it makes a lot
more sense to put DRBD on top of LVM.
* Made the user dialog to work on RedHat based distributions.
* A small optimization that improves the performance of the
syncer when woking with IBM's ServRaid Controllers (ips).
May have a positive effect with other Controllers as well.
* Made epoch_size atomic. This removes a SMP race condition that
could lead on some Xeon CPUs to an ASSERT printk, but did no other
harm than printing messages to the syslog
* Fixed write_gc.pl to work with the perl version delivered
* Made the initscript to abort if one of the setup commands fails.
* "drbdadm adjust [res...]" now does the calls to drbdsetup
in an improved order, first the disk config of all devices,
then the syncer and net config last. With the old scheme
drbdadm run in a timeout when setting up more than about
6 devices at once (startup script...).
* New progress indication in the startup script.
* Bugfix to a race that could cause a OOPS on a BUG() macro
in mod_timer while starting resync. The more devices you have
the higher the probability to hit this race condition.
* Fixed a bug in the sync-groups conde, that only showed up
when you have more than 4 resources in your config.
The resync process was continued too early on the node in
* Fixed a stupid typo in the range-check code, that was intoduced
in 0.7.6. Drbdsetup allowed "max-buffers" to be in the range
from 32 to 32.
* Makefiles are gcc-2.95 compatible again.
* Fixed bug that could cause a lockup of the receiver and
asender threads, the visible outcome was that the syncer
* Fixed a bug that under specific circumstandes caused that the
SyncSource node did not recognised that a resync process was
* "drbdadm invalidate [res]" was not working correct, while
"drbdadm invalidate_remote [res]" works. Fixed the former.
* Make DRBD work on Linux-2.6.10-rc2 and newer: Replaced
sock_alloc() by sock_create(), replaced TASK_ZOMBIE by
* Range checks in drbdadm for all numeric configure parameters.
* A fix to make ioctl()s work on machines with 64bit kernel space
and 32bit user space.
* Ioctl()s are only allowed if the caller has CAP_SYS_ADMIN set.
* Removal of warnings on 64bit architectures.
* Backport of find_first_bit() for x86_64 aka AMD64 for use on
that architecture under Linux-2.4.x
* Changed drbdadm to do the syncer config before the net config.
* Changed the way drbdadm determines the minor_count parameter for
* Improvements to the drbddisk script, to do the right thing
in case Heartbeat is configured with a small timeout than DRBD.
* On request of the debian package maintainers, the debian directory
from SVN is not longer included in the tar.gz releases.
* Fix a bug that could case read requests to return wrong data
on a node in Primary/SyncTaget state. (A very unlikely race,
it is not known that this ever triggered; It was found by an
ASSERTION in the code)
* Removed the 30MB/sec speeding limit for the syncer. (this was
intended as a debugging aid, but it was not removed in time)
* A fix to drbdsetup, to make drbdadm adjust work if a resource
* Got rid of the compiler warning when build on a kernel with
CONFIG_LBD not set.
* Now the device nodes are created with sane permissions.
* The debian package is now named "drbd0.7"
* set_fs() is now also done for sendpage()
* Better compatibility with early 2.4.x kernels (BH_Launder, min()/max())
* Touch /var/lock/subsys/drbd, needed for RedHat based distros.
* Improvements to the INSALL document
* Removed HOWTO, ja, pt_BR ... all hopelessly outdated.
* Fixed a critical bug with Linux-2.4.x and HIGHMEM!
* Fixed a bug that only showed up with the HIGHMEM problem on
Linux-2.4.x -> It caused the resync process to starve.
* The drbd.spec file now creates /dev/drbd in the post-install stage.
* Fixed support for more than 2TB storage. Now DRBD supports up to
3.99TB storage. It will also tell you, that it is not supported if
you try to set up a bigger device.
* Debian's build rules file now knows about the adjust_drbd_config_h.sh
* DRBD_DISABLE_SENDPAGE available in drbd_config.h
* Fixed minor bugs in the handling of the generation counters.
* prevent possible in-kernel buffer overflow in drbd_proc.c
* Fixed debian's postinst script to create /dev/drbd? instead of /dev/nb?
* drbd status:
be nice to heartbeat, include "OK" in output.
* added FullSync meta data flag to read/write gc.pl
* make the RHEL3 happy (page_count no longer in mm.h, but in mm_inline.h)
* [Patch by Pavel Semerad]. Also use the drbd_devfs_name on Linux-2.4.x
* fix missing dependencies on drbd_config.h
*) Proper handling of backing storage devices that occasionally fail
READA (=read ahead) requests. (E.g. LVM and MD)
*) DRBD now fails READA requests itself, if a resynchronisation is running
and it would need to fetch the block from its peer.
*) "drbdadm adjust" had a race, which caused random errors. ( Missing
waitpid() ). Fixed now.
*) Proper subtract SyncPause times from the syncer performance numbers.
*) Fix to the syncer progress bar in /proc/drbd.
*) Fix to debian build rules.
*) Upgrade instructions for 0.6.x -> 0.7.0 and 0.7.0 -> 0.7.1
*) Workaround for XFS' IO requests with page count of zero.
*) Handle the human and the timeout count correctly in the new init script.
*) The implementation of the incon-degr-cmd was missing, added.
*) Fix for integer overflow in /proc/drbd syncer progress display
*) Longer timeouts in drbdadm for drbdsetup commands witch operate on
*) New major number 147 (officially registered at lanana.org).
*) Added a missing w_resume_next_wg() in case we stop syncing because
of connection loss.
*) Fixed a Linux-2.2-ismus in recieve_data_tail(). Should considerably
speed up protocols A and B.
*) Some work on vendor kernel compatibility
Drbd-0.7 was actually forked off from drbd-0.6.1 (actually -pre18).
*) Complete new way of doing resynchronisation. Does no longer need
to do tricks with the nice value, and delivers very good performace.
*) Decoupling of role assignment (primary/secondary) from the direction
of resynchronisation. (Necessary for primary/primary)
*) All "ack" and "ping" packets now go through the msock.
(Prerequisite for primary/primary)
*) Reworked a lot of internals to work with sector_t instead of
blocknumbers. DRBD works now with XFS, and will be complete
immune to changes in the block size.
*) Reworked the tl_ code, the user no longer has to specify the size
for a preallocated transfer-log.
*) Improved metadata; Ao the device size is now stored in metadata,
users no longer need to configure it.
*) Online resizing via "drbdsetup resize"
*) Resynchronisation groups "drbdsetup syncer -g"
*) New (very short!) sys-v init scripts, new userland tool "drbdadm"
*) Changes to the way we allocate memory. We want to survive hard OOM
situations. (partially done, partially ongoing work)
*) Implemented the Activity-Log and the persistent bitmap.
Since the last one should have been 0.6, this is 0.6.1:
*) Rewrote the receiver code. This one eliminates inter-device deadlocks,
as far as I can tell (and is a big step in the direction of active/active)
*) Introduced a new Packet into the protocol. The "WriteHint" drastically
improves performace of protocol C in conjunction with a FS with mount
*) Fixed a bug that could cause a OOPS on the primary if the connection
is lost when the send queue is not empty.
*) Fixed a bug that could cause data corruption on the secondary if you
put high IO-load on the primary during resynchronisation.
*) Fixed a bug that could cause the secondary to "forget" to send some
ack packets if it is under high load during resynchronisation.
*) devfs support by Lelik P.Korchagin <firstname.lastname@example.org>.
*) Fixed a bug that could crash a task in kernel space on the primary
in the moment the secondary leaves the cluster.
*) A few SMP-only bugs removed.
*) The state files are now written with O_SYNC.
*)Droped the postponepackets; Checkeing the liveliness via a second
TCP connection (msock). -- No more timeout in case of the standby
node has high load.
*) If an application which is writing to a drbd device receives a signal
while it sleeps in DRBD's send_msg call, the connection is dropped.
-- Fixed this bug. (You could observe this with tiobench)
*) Fixed serious bugs in the meta-data handling.
*) Split the code of the module into 7 files
*) Added reasonable support for Linux-2.4.x.
Yes you can put in on top of RAID/LVM and you can even stack
multiple drbd devices.
*) Completely removed the SYNC-LOG and implemented a better scheme
*) Removed the mbdh.h interface since it was useless
*) Implemented correct signal sending (not longer done from interrupt time)
Based on a patch from Ard van Breemen <email@example.com>
*) Implemented correct removing of requests from the transfer log
*) Fixed a "can not guess name" bug in drbdsetup
*) implemented /etc/init.d/drbd XXX status
*) From now on the drbd wire protocol and the ioctl interface carry
interface version numbers, which are independend of the release
number. E.g. You can combine a drbd device of release 0.6.1 and
0.5.8, since both have protocol version 58. You can even use
drbdsetup of 0.5.8 to configure the module of the 0.6.1 release.
A lot of new features: (This release should be named 0.6)
*) codecleanup of the on-the-fly counters
*) drbdsetup is not splitted into a disk and a net part / syntax changed
*) syncer rewritten. Now a lot faster but currently only woking with
4K based file systems. (mkfs -b 4096)
*) Meta-data management implemented. => DRBD is now able to select
the node with the up-to-date data to become primary after a cluster
*) datadisk / drbd scripts rewritten two times :) Now they are in
perl and we have a new configuration file named /etc/drbd.conf
*) Fixed the bh_count > 0 bug.
*) Fixed the multiple-timeouts-bug.
*) Fixed a bug when working with a fs with a blocksize other than 4096
*) Applied the patch from Juri Haberland against the datadisk script.
No updates to the mirroring core. (It seems to be stable)
A lot of updates to the "user interface"
*) Better log-messages and better messages of drbdsetup.
*) Fixed a few crashes of drbdsetup/ioctl interface.
*) It is not longer possible to use an already mounted partition.
*) It's possible to unconfigure a drbd device now.
*) Fixed the "infinite error messages" when a wrong disk size was given.
A better datadisk script (Thomas Mangin contributed this, thanks)
Some work on the protocol:
*) Added automatic reconnect
*) An intace connection is monitored by "ping" packets, thus
a secondary will notice a broken connection immediately.
Found and fixed a 64 Bits problem in the bitmap based syncer.
SMP and ext3 fixes to the module.
Scripts should work on RedHat distributions now.
(Automatic) support for more than two devices.
No more zombies, when a connection is canceled.
An important SMP fix. (It seems to work on SMP now)
A lot of small improvments.(benchmarking, stress testing... )
More sanity checks.
Fix to protocol C.
Script for automatic benchmarking.
New heartbeat scripts.
Improved the behaviour upon loss of connction. Now it
always goes into WFConnection state instead of Unconnected.
Added a command to drbdsetup to force a run of the basic syncer.
Things to be fixed: Heartbeat scripts, protocol C on SMP machines.
Fixed the lockup upon loss of connection on SMP machines.
Added a kludge to make use with heartbeat possible.
Added scripts for use with heartbeat.
The code was considerably changed and enlarged.
There are now three wire protocols.
A) A write operation is complete as soon as the data is
written to disk and sent to the network.
B) A write operation is complete as soon as a reception
c) A write operation is complete as soon as a write
The basic syncer was replaced by a bitmap-based syncer. The new
one only updates the blocks which were modified during the
absence of the newly joined node.
A huge load of bug fixes.
Finally I cleaned up the drbdsetup utility. Now all the
features are accessible with command line options.
There is a basic syncer now. It will bring a newly joined
secondary node up to date by copying each block.
It is working at 250KB/second (hard coded in drbdsetup for now).
IO errors on the local disk are now reported as if there
was an io error on drbd.
There is a new timeout. If the primary node cannot send (TCP!)
within the timeout, it falls back into unconnected operation.
You can also disable the timeout (by setting it to zero), but in
case of a failure of the secondary node, your primary node will block!
Currently the timeout is hard coded into drbdsetup (3 Seconds).
This time I worked a lot looking into all possible deadlocks...
I think if you do not use any loop-back device it should
work without deadlocking. It is not working on top of the loop
block device and it is not working via the loop-back network!
This time it should handle all block size issues, and thus
reiserfs is feeling happy on top of drbd.
Status of drbd-0.1.tar.gz
This is a proof-it-is-no-vapo-ware-release and not more!
It is the first time it is somehow working without immediately crashing
my machine (you can "even" unload the module). It is not able to
handle block sizes other than 1024 and there is not a single line of code
of the sync-a-new-secondary stuff yet.
The used port is hard coded into drbdsetup (7788) for now.
I have tested it on an Intel box and an alpha machine.