Latest:
------
 For even more detail, use "git log" or visit http://git.drbd.org/.

9.0.11-1 (api:genl2/proto:86-112/transport:14)
--------
 * Fix bug in compat code: Without this fix large bios are not split.
   The user visible behavior is then a hanging DRBD.

9.0.10-1 (api:genl2/proto:86-112/transport:14)
--------
 * Fix resync of two secondary nodes in the presence of a 3rd node that is
   primary (maybe with disk or diskless); Fixed the race condition that
   caused the resync to sometimes not terminate
 * Improve connection behavior with autopromote enable one node Primary and
   udev present. The problem was that if udev opens the device on the
   Secondary side "in the right moment" the connection attempt was
   aborted. Fixed that by waiting until udev closes the device
   again. Improves connect speed!
 * Fix in memory alignment of DRBD's struct bio. Got offseted by one due to a
   buggy compat code. Only affects architectures that choke on unaligned
   word accesses. I.e. Power and ARM not x86_64.
 * Improve the quorum implementation, so that is works nicely with for the
   purpose of replacing fencing with quorum in a Pacemaker setup. Quorum
   lost affects the completion status of writes in flight; Quorum state is
   visible to user-space; a new meta-data flags quorum-lost to handle a
   corner case
 * Ensure compatibility with upstream Linux kernel 4.14

9.0.9-1 (api:genl2/proto:86-112/transport:14)
--------
 * fix occasionally forgotten resyncs in installations where
   diskless primaries are present. The bug tigers when a storage
   node is re-integrated, and it happens to connect to the diskless
   primary first; This bug is severe, since it might cause inconsistent
   data read back on the diskless primary!
 * fix an issue that causes unexpected split-brain situations upon
   connect. This issue triggers only when one of the node has a
   node_id bigger than 3
 * in a cluster with a diskless primary, when a server goes away,
   and is not outdated, outdate it upon reconnect. This gets done
   when it's current UUID does not match the diskless primaries
   exposed data UUID; with this bug present it can lead to
   inconsistent data presented on the diskless primary node to
   readers
 * fix update of exposed data UUID on diskless primaries. It could
   lead to false reject of further diskfull secondaries that
   want to join
 * fix a possible OOPS when in a debug message regarding bitmap
   locking
 * fix discard bigger than 1MiB; The bug causes disconnect with
   bigger discard requests
 * fix left over bits in bitmap on SyncSource after resync; the
   issue was triggered by write requests that come in while the
   resync starts
 * fix peers becoming unexpectedly displayed as D_OUTDATED at the
   end of a resync; While the disk state on the node stays D_UP_TO_DATE
 * fix a race between auto promote and auto demote of multiple volumes
   in a single resource; The symptom was that the a process opening
   the /dev/drbdX for read-write gets an -EROFS errno
 * Speed up down of many resources by using call_rcu() instead
   of synchronize_rcu()
 * Make it compatible with the soon to be released 4.13 kernel

9.0.8-1 (api:genl2/proto:86-112/transport:14)
--------
 * fix a race condition between adding connections and receiving data
   blocks; When you hit it caused an OOPS
 * fix a OOPS on a diskfull node when a request from a diskless
   node causes an error from the back-end device. (This is a regression that
   was introduced with the 9.0.7 release)
 * fix a distributed deadlock when doing a discard/write-same burst
 * fix an issue with diskless nodes adopting wrong current UUIDs
 * fix wrongly rejected two-phase-state transactions; this issue was a
   cause for drbdmanage init failing for 3 nodes
 * fix attach of first disk after resource had no disk at all
 * fix to not clear bitmap content and UUIDs in case we ignored a
   split-brain situation
 * fix a possible OOPS, caused when the sender thread tries to send
   something after the sockets where free()'ed
 * fix ignoring split-brain situations to the rare cases it was
   intended to in the first place
 * fix an issue with current-uuid not getting written for 5 seconds. When a
   resources was down'd/up'd or the node rebooted, you got split brain
   afterwards
 * fix a race that caused DRBD to go StandAlone instead of Connecting
   after loosing a connection
 * Serialize reconciliation resync after the nodes found it if they
   are UpToDate
 * fix initial resync, triggered by "--force primary"; this is a fix
   for a regression introduced in 9.0.7
 * new configuration option that allows to report back IO errors instead
   of freezing IO in case a partition looses quorum
 * Speed-up AL-updates with bio flags REQ_META and REQ_PRIO
 * merged changes from 8.4.10 and with that compatibility with Linux-4.12

9.0.7-1 (api:genl2/proto:86-112/transport:14)
--------
 * various fixes to the 2-phase-commit online resize
 * fix fencing and disk state transition and from Consistent; Now it is
   as complete as it was under drbd-8.4; Necessary for crm-fence-peer
 * fix moving previous current-uuid into bitmap slot for peer with
   inconsistent disk state. Old code produced false "split-brain detected"
 * fix calculation of authoritative nodes. Old code could lead to to
   false "split-bain detected"
 * udev workaround: Do not fail down if there is a read-only opener, instead
   wait up to a second if the read-only-opener goes away.
 * a primary notes if a "far away" nodes outdates itself, and records the
   fact in its meta-data.
 * report back to userspace if a node (or peer) is diskless by intention
 * restore "Outdated" peer disk state from the meta-data upon attach
 * Quorum to avoid data divergence, an alternative to fencing when the
   resource has 3 or more replicas
 * improve error reporting in case a promote/down/disconnect/detach
   operation failes. E.g. tells which peer declined a state transition
 * compiles with Linux 4.10

9.0.6-1 (api:genl2/proto:86-112/transport:14)
--------
 * fixed error handling in del_path
 * merge fixes from drbd-8.4; a potential NULL deref with kernel_sendmsg()
 * fix multiple issues with concurrent two-phase-commits
 * improve connect time; with older releases it usually took between 20 to
   40 seconds to establish a connection; now it usually works now in less than
   2 seconds
 * allow multiple updatese per AL-transaction on a secondary; this can
   (depending on the IO pattern) dramatically increase the the write
   throuput and decrease IO amplification
 * reorganize data structures of receiver for efficiency
 * upon an open for read-only access, wait for up the auto-promote-timeout
   for accessible data

9.0.5-1 (api:genl2/proto:86-112/transport:14)
--------
 * fix a bug that causes data inconsistency between mirrors. The bug triggered
   if you write on a diskless primary while a resync is going on between two
   nodes with disk.
   It might happen that the diskless primary chooses the not-updated mirror for
   subsequent reads of those blocks, then this bug manifests as data corruption.
 * no longer allocate bitmap-slots on diskfull nodes for nodes that are
   configures to be diskless; Saves bitmap-slots, thus allows you to use
   smaller max-peers numbers, thus saves memory and CPU resources
 * fix bugs in the try_become_up_to_date() logic; they caused hanging
   machines or hangs during state transitions
 * fix a IO deadlock that could happen when two secondaries are in a resync
   and a write on a third node (primary) is sent two the two resyncing nodes
 * fix two phase-commits when the nodes form a circular structure
 * fix support for WRITE_SAME. Was broken since merged from 8.4
 * balance read requests from diskless primary nodes among multiple peers
   (if available). In the past it read always from one node (that happened
   to be first in the internal data structures)
 * make sure it compiles with Linux 4.8

9.0.4-1 (api:genl2/proto:86-112/transport:14)
--------
 * fix enforcement of single-primary constraint; a regression of 9.0.3
 * fix resetting of ko_count
 * fix the sometimes seen two-phase-commit ABORT endless loop
 * fix a possible sleep in atomic with no longer taking locks in _destroy
   functions
 * fix two-phase-commits when the nodes build a loop; correctly handle
   them where the two "flows" merge, both for PREPARE and COMMIT
 * fix the resync after online grow
 * fix a refcount leak in case a user-process terminates while doing
   a .dumpit operation (drbdsetup state; drbdsetup show; drbdsetup events2...)
   The damage of the bug was a resouce that never goes away
 * fix a multi-node issue in comparing the GIs
 * fix data-structure handling for RCU consumers (adding connections)
 * reimplement online resize as two-phase-commit operation; the old online resize
   code could get into packet-loop storms, had many problems; works when all nodes
   support protocol 112
 * enable kref-debug code by default
 * enable parallel_ops for gennetlink operations; that is a workaround for
   a "sleep while atomic" on kernels 4.3 and upwards; it is a performance
   improvement for all; especially users of Open vSwitch will rejoice
 * avoid "initial packet S crossed"
 * a number of fixes to speed up establishing of connections
 * remove some home made mutex deadlocks
   (auto promote - down; del_resource - new_path)

9.0.3-1 (api:genl2/proto:86-111/transport:14)
--------
 * fix a deadlock in try_become_up_to_date()
 * fix an unintended overlay of an internal peer device flag and a device flag
   The bug manifested itself that sometimes DRBD forgot to create a new
   current UUID
 * Create a new current UUID when the peer's disk breaks, do not wait
   for a following write
 * In case of an auto-promote event with no up-to-date data present wait
   also wait for an connection with an up-to-date data peer for the time
   of the auto-promote-timeout
 * mark permanently diskless nodes in the meta-data of all nodes
 * rework online resizing
 * fix a reace condition that triggered a BUG() because it called
   add_timer() twice for the same timer object
 * fix multiple causes of outdated disks not becomming up-to-date
   after no longer being weakly connected
 * removed a use of an uninitialized value that might lead to an
   unexpected outdate of the local disk upon disconnect
 * found and fixed why sometimes a P_TWOPC_ABORT packet did not reached
   all nodes of a cluster; that was the reason for hanging two-phase
   commits
 * Allow multiple diskless primaries if they are connected to a common
   secondary that has a disk
 * empty flush requests no longer trigger a bogus "IO ERROR" log entry
 * restored the new-current-uuid --clear-bitmap functionality to skip
   the initial resync

9.0.2-1 (api:genl2/proto:86-111/transport:14)
--------
 * Fix list walks on the transfer log; Lead to crashes in _tl_restart()
   and (sometimes) other places.
 * Fix a corner case that lead to nodes showing the disk states of
   other nodes as Outdated after resync
 * Fix waiting for barrier acks; The bug was that demoting to secondary
   after AHEAD/BEHIND may blocked forever
 * Fix WRITE_SAME support
 * Fix a possible OOPS in got_peer_ack()
 * Fix resync controller; Was always on c-min-rate
 * Fix a possible deadlock on disconnect
 * Use modern kernel's expclicit plugging to reduce number of IOPs on
   the secondary node
 * Introduce a per resource max-io-depth limit; applies to each volume
   in the resource
 * Promptly send peer_acks if we can put the last reference on an
   activity log entry. Helps the to get the AL in use on secondaries
   down.

9.0.1-1 (api:genl2/proto:86-111/transport:14)
--------
 * Fix ahead/behind mode: spinlock deadlock when entering and resync afterwards
 * Fix crash in online verify
 * Fix crash when receiving pages on a diskless node
 * Fix issues with resize when more than two nodes are present
 * Many minor fixes
 * Work on the multi-path support; the TCP transport now tries all paths while
   connecting, afterwards it uses one path
 * The RDMA transport supports multiple paths and can use them in parallel
 * Configuration option to make resync thinly provisioned storage
   friendly: rs-discard-granularity
 * Make sure it compiles with Linux 4.4
 * Merge changes from the 8.4.7 release
 * Fix a preformance regression of 8.4.0; it got worse with bigger devices;
   really significant above 1TByte

9.0.0-3 (api:genl2/proto:86-110/transport:10)
--------
 * Fixes for the RDMA transport
 * Fixes for 8.4 compatibility
 * Merge changes from the 8.4.6 release

9.0.0 (api:genl2/proto:86-110)
--------
 * split drbdsetup connect into new-peer, add-path, connect;
   split disconnect into del-path, disconnect and del-peer
 * create a new configuration object 'peer-device'; move config
   params of resync to the peer-device
 * a transport abstraction layer that will allow for alternative
   transports besides TCP. Planed are RDMA/Infiniband and SCTP
 * moved the user space code to a dedicated repository (with
   that the driver no longer uses autotools)
 * drbdsetup events2 supersedes events; drbdsetup status supersedes
   cat /proc/drbd; both commands are also available with drbd 8.4.6
   and recent drbd-utils
 * Fixed the wait-[connect|sync] drbdadm commands. Now they actually
   work on all three object types (resources, connections, volumes)
 * New command called "forget-peer". It is used to free a peer-device
   slot. Online (via drbdsetup) or offline (via drbdmeta)
 * Introduced two phase commits that span include all (direct
   and indirectly) connected nodes. This new type of transactions
   is used when a node bacomes primary, or when a new connection
   is established.
 * Reworked resync decisions for multiple connections, and weakly
   connected nodes.
 * Support for multiple connections in a single resource; this feature
   obsoletes device stacking; new configuration keywords: connection,
   host, node-id, connection-mesh, hosts.
 * Automatic promote; if a process opens a drbd device for r/w, drbd
   tries to promotes that resource to primary; if the last process
   closes the device drbd demotes that resource to secondary; opens
   fails if promotion fails. This feature obsoletes become-primary-on
 * Activity log striping; Besides the striping this allows AL
   sizes of up to 65536.
 * Non blocking queuing of AL-updates; This change significantly
   improves the number of IOPs in case the workload does not fit into
   the configured AL size.
 * Resync extents are now 128MiByte instead of 16MiBytes
 * Use git submodules to share code between drbd core, user-space
   tools and drbd transports
 * a dedicated disk state for Detaching (previously Failed was
   used for a detaching disk)

