Latest:
------
 ChangeLog last updated: $LastChangedRevision$
 $LastChangedDate$

 Cumulative changes since last tarball.
 For even more detail, use "svn log" and "svn diff".

0.7.25 (api:79/proto:74)
-----
 * Made it to compile on Linux-2.4 again.
 * Backported a fix to not deadlock on 2.6.22 and later.
	
0.7.24 (api:79/proto:74)
-----
 * Fixed leakage of bios in case we are diskless.
 * A fix to the device name guessing code.
 * Made it to compile on 2.6.21 and gcc-4.1 without warnings.

0.7.23 (api:79/proto:74)
-----
 * Made it to compile on 2.6.19.
	
0.7.22 (api:79/proto:74)
-----
 * Fixed bugs in the implementation of protocol A and B.
   we noticed that in protocol A and B, on connection loss,
   we could "forget" to set certain areas out of sync.
   so resync in those protocol has been broken all along!
 * Fix races between failure in drbd_send_dblock
   and concurrently running tl_clear
 * Fix potential access-afer-free in drbd_dio_end
 * Fix possible list corruption respective resulting deadlock in 
   receive_DataRequest
 * Improved the drbd_thread_stop / start code
 * Gracefull removal of devfs and other updates.
 * Implemented the "freeze_io" option for "on-disconnect"

0.7.21 (api:79/proto:74)
-----
 * Fixed the "syncer stalled" after reconnect symptom.
 * Fixed the "stalled in WFParams" after reconnect symptom. The cause
   of this bug was actually a misuse of the data socket.
 * Allow to set the uplug_watermark to 1, only usefull for very strange
   cases.

0.7.20 (api:79/proto:74)
-----
 * The GC comparison code failed to start a resync in case the two
   cluster node failed simultaniously (common power failure).
 * Fixed DRBD's code to start kernel threads to work on 2.6.17 also.
 * IOCTL return codes fixed for 32bit userland - 64 bit kernel
   setups.
 * New config option "unplug-watermark".
 * Released the drbd_alloc_ee() / drbd_free_ee() implementation from 
   the DRBD+ branch to the main branch.

0.7.19 (api:78/proto:74)
-----
 * Fixed a bug where lc_del() left a list poison in an LRU chache's
   hash table. The only way to trigger this bug was:
   up (>>200M), primary, mkfs, resize to 200M, down, up
 * DRBD now propagates the backing storage's read ahead properties
   to upper layers. With devices that read very fast, this is 
   important.
 * GFP_KERNEL was changed to GFP_NOIO in a few places, to make it
   more save against deadlocks in the memory subsystem.

0.7.18 (api:78/proto:74)
-----
 * Under high memory pressure it was possible to hit a deadlock 
   on a kmalloc(). Changed the GFP mask, it is no longer possible to
   deadlock it with memory pressure.
 * With very unlucky network timing during connect DRBD falls into 
   a connect / drop-connection loop, that as soon as DRBD is in this 
   loop is very stable. This is fixed now, DRBD detects this situation
   an breaks out of it.
 * Fix to the init-script. Now it waits until udev has created
   the device nodes of _all_ resources.
 * A small fix for the 32bit userland 64bit kernel people, running
   older kernels.
 * Improved handling of IO errors during initial read in of the
   activity log.

0.7.17 (api:77/proto:74)
-----
 * There was a bug that could cause the activity log to be not applied 
   after a primary crash, when an other size than 127 elements was configured.
 * There was a bug in the activity log code, that could cause that the
   latest update to the AL is omitted at recovery time.
 * The "Marked additional XXKB as out-of-synced based on AL." message
   showed one one eighth of the real amount, fixed.

0.7.16 (api:77/proto:74)
-----
 * DRBD no longer shrinks an consistent device if it gets connected to
   an smaller peer or attached to a smaller disk.
 * There was a bug related to the degr-wcf-timeout config option, it was
   never used in recent DRBD releases. Fixed.
 * Made DRBD work with Neil Brown's patch, that serializes recusive
   ralls to generic_make_request(). FC4 included that patch in its
   later kernels.
 * Minor fixes to drbdadm
 * Compiles now also with Linux-2.6.16-rc1
 * Updates to documentation and example config file to make it more
   clear that we talk about byte/second and not bit/second.

0.7.15 (api:77/proto:74)
-----
 * Fixed a bug in the GC code that could cause a resync attempt
   in the wrong direction.
 * Made DRBD's compat_ioctls work with kernels higher than 2.6.14. This
   means DRBD builds on AMD64/x86_64 with 2.6.15 and higher again.
 * drbdadm no longer looks in the current directory for its 
   backend programs (=drbdsetup), but instead looks in the directory
   of the drbdadm executable and in $PATH.
 * Removed the examples from manpage, added a pointer to the HA-wiki.

0.7.14 (api:77/proto:74)
-----
 * Fixed a SMP race condition introduced in 0.7.12, that could cause
   a lockup on a busy node in Primary/SyncSource state.
 * In case a disc failes during a read requests, the read requests
   is reissued to the peer. Now it also tells the peer that the disk
   broke. 
   Without that fix this bug could cause a resync in the wrong direction
   after a cluster restart.
 * Some improvements to the documentation.

0.7.13 (api:77/proto:74)
-----
 * Fixed a SMP race condition that caused the resync process to stall
   after a few seconds to minutes.
 * The sync speed display is replaced by the word "stalled" in case the 
   syncer makes no progress within 20 seconds.
 * Some improvements to the documentation.

0.7.12 (api:77/proto:74)
-----
 * The /proc/drbd code used a fixed single page buffer. This breaks 
   at about 30 configured devices. Changed that to use the seq_file
   interface.
 * Bind the source of TCP connections to the IP address that is
   mentioned in the configuration. 
 * Fixed a connection flip-flop bug when the two peers used different
   user provided sizes.
 * Various fixes in the online-resize code path, including online shrinking
   and handling the case that the memory allocation for the new bitmap
   failed.
 * Random improvements to drbdadm: 
   * The "size" option is now allowed in the disk section
   * A new "disable-ip-verification" option for the global section
   * The "disable-io-hints" option is not longer available.
   * Allow "drbdadm -- --size=XXX resize r0".
 * Fixed a potential very unlikely race condition that in the end would
   trigger an ERR in drbd_actlog.c:607. Actually I never saw this trigger.
 * Fixed a logic bug in _drbd_process_ee() that, paired with a race condition
   could trigger a "ASSERT(b->n_req == set_size)" upon disconnect.
 * Removed the "disable_io_hints" module parameter.
 * Added the "disable_bd_claim" module parameter, to allow users, WHO 
   KNOW WHAT THEY DO, to read-access the data on the secondary node.
 * Allow "drbdadm invalidate" only in StandAlone and Connected states. 
 * DRBD no longer goes into StandAlone mode, if there is an random network 
   error during the handshake phase, instead it retries the to connect.
   Only critical problems, e.g. incompatible protocols will cause it 
   to go into StandAlone mode.

0.7.11 (api:77/proto:74)
-----
 * The upper limit of the runtime tuning parameter max_buffers 
   was ways too low for today's IBM storage controllers. 
   Was 32 - 10000 ; Now it is 32 - 131072 ( Now one could 
   allow DRBD to allocate up to half a gigabyte of memory as 
   receive buffers)
 * A fix to the Makefiles to make building of RPMs work on RAHS4.
 * A workaround to have DBRD running on PPC64 with Linux-2.4.x kernels,
   on Linux-2.6.x everything was fine already.
 * Removal of dead code (busy_blocks).
 * LINBIT drbd rpms now conflict with km_drbd
   (SuSE's kernel module source hook)
 * possibly existing /lib/modules/*/extra/drbd.ko are renamed to .orig in the
   post-install scripts to avoid conflicts with existing modules from
   distribution kernel packages
 * fixed flex input buffer overflow
   drbdadm_scanner.fl produced tokens of arbitrary length due to excessive use
   of "+" and "*" modifiers. Now these are replaced with "{x,y}" modifiers, so
   it should no longer segfault, which was actually observed e.g. with long
   continuous comment blocks (~5k). 

0.7.10 (api:77/proto:74)
-----
 * 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.

0.7.9 (api:77/proto:74)
-----
 * A fix that makes DRBD work on SLES9 SP1 kernel, and 
   probabely will be also necessary for Linux-2.6.11

0.7.8 (api:77/proto:74)
-----
 * 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
   with RHAS3.
 * Made the initscript to abort if one of the setup commands fails.

0.7.7 (api:77/proto:74)
-----
 * "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
   SyncTarget state.
 * 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.
	
0.7.6 (api:77/proto:74)
-----
 * Fixed bug that could cause a lockup of the receiver and
   asender threads, the visible outcome was that the syncer
   starves.
 * Fixed a bug that under specific circumstandes caused that the
   SyncSource node did not recognised that a resync process was
   finished.
 * "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 
   EXIT_ZOMBIE.
 * 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
   module loading.
 * 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.

0.7.5 (api:76/proto:74)
-----
 * 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
   is diskless.
 * 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.
   disabled benchmark/run.sh

0.7.4 (api:76/proto:74)
-----
 * 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
   file.
 * DRBD_DISABLE_SENDPAGE available in drbd_config.h

0.7.3 (api:75/proto:74)
-----
 * 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

0.7.2 (api:75/proto:74)
-----
  *) 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.
	 
0.7.1 (api:75/proto:74)
-----
  *) 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 
     meta data.
  *) 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
	
0.7.0 (api:74/proto:74)
-----
  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.
	
0.6.1  (api:58/proto:61)
-----
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
     option "sync".
  *) 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 <lelik@price.ru>.
  *) 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 <ard@telegraafnet.nl>
  *) 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.
	
0.5.8
-----
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 
     restart.
  *) datadisk / drbd scripts rewritten two times :) Now they are in
     perl and we have a new configuration file named /etc/drbd.conf

0.5.7
-----
Bugfix release:
  *) 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.

0.5.6
-----
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:
  *) Cleanup
  *) 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.

0.5.5
-----
SMP and ext3 fixes to the module.
Scripts should work on RedHat distributions now.
(Automatic) support for more than two devices.

0.5.4
-----
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... )

0.5.3
-----
More sanity checks.
Fix to protocol C.
Script for automatic benchmarking.
New heartbeat scripts.

0.5.2
-----
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.

0.5.1
-----
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.

0.5
---
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 
   acknowledgement arrived.
c) A write operation is complete as soon as a write
   acknowledgement arrived.

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.

0.4
---
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.


0.3
---
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).


0.2
---
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.


