Please see git logs for detailed change log.
This file just contains highlight.

Changes Prior to release 3.1.4
  Two fixes related to configs that aren't using udev:
   -    Don't remove md devices which 'standard' names on --stop
   -    Allow dev_open to work on read-only /dev
  And fixed regressions:
   -    Allow --incremental to add spares to an array
   -    Accept --no-degraded as a deprecated option rather than
            throwing an error
   -    Return correct success status when --incrmental assembling 
        a container which does not yet have enough devices.
   -    Don't link mdadm with pthreads, only mdmon needs it.
   -    Fix compiler warning due to bad use of snprintf

Changes Prior to release 3.1.3
   -    mapfile now lives in a fixed location which default to
        /dev/.mdadm/map but can be changed at compile time.  This
	location is choses and most distros provide it during early
	boot and preserve it through.  As long a /dev exists and is
	writable, /dev/.mdadm will be created.
	Other files file communication with mdmon live here too.
	This fixes a bug reported by Debian and Gentoo users where
	udev would spin in early-boot.
   -    IMSM and DDF metadata will not be recognised on partitions
        as they should only be used on whole-disks.
   -    Various overflows causes by 2G drives have been addressed.
   -    A subarray of an IMSM contain can now be killed with
        --kill-subarray.  Also subarrays can be renamed with
	--update-subarray
   -    -If (or --incremental --fail) can be used  from udev to
        fail and remove from all arrays a device which has been
	unplugged from the system.  i.e. hot-unplug-support.
   -    "mdadm /dev/mdX --re-add missing" will look for any device
        that looks like it should be a member of /dev/mdX but isn't
	and will automatically --re-add it
   -    Now compile with -Wextra to get extra warnings.
   -    Lots of minor bug fixes, documentation improvements, etcc

Changes Prior to release 3.1.2
   -    The default metadata has change again (sorry about that).
        It is now v1.2 and will hopefully stay that way.  It turned
        out there with boot-block issues with v1.1 which make it 
        unsuitable for a default, though in many cases it is still
        suitable to use.
   -    Stopping a container is not permitted when members are still
        active
   -    Add 'homehost' to the valid words for the "AUTO" config file
        line.  When followed by "-all", this causes mdadm to
        auto-assemble any array belonging to this host, but not
        auto-assemble anything else.
   -    Fix some bugs with "--grow --chunksize=" for changing chunksize.
   -    VAR_RUN can be easily changed at compile time just like ALT_RUN.
        This gives distros more flexability in how to manage the
        pid and sock files that mdmon needs.
   -    Various mdmon fixes
   -    Alway make bitmap 4K-aligned if at all possible.
   -    If mdadm.conf lists arrays which have inter-dependencies,
        the previously had to be listed in the "right" order.  Now
        any order should work.
   -    Fix --force assembly of v1.x arrays which are in the process
        of recovering.
   -    Add section on 'scrubbing' to 'md' man page.
   -    Various command-line-option parsing improvements.
   -    ... and lots of other bug fixes.
	
Changes Prior to release 3.1.1
   -    Multiple fixes for new --grow levels including fixes for
	serious data corruption problems.
   -    Change default metadata to v1.1
   -    Change default chunk size to 512K
   -    Change default bitmap chunk size to 64Meg
   -    When --re-add is used, don't fall back to
	--add if --re-add fails as this can destroy data.

Changes Prior to release 3.1
   -    Support --grow to change the layout of RAID4/5/6
   -    Support --grow to change the chunksize of raid 4/5/6
   -    Support --grow to change level from RAID1 -> RAID5 -> RAID6 and
        back.
   -    Support --grow to reduce the number of devices in RAID4/5/6.
   -    Support restart of these grow options which assembling an array 
	which is partially grown.
   -    Assorted tests of this code, and of different RAID6 layouts.
	
Changes Prior to release 3.0.3
   -    Improvements for creating arrays giving just a name, like 'foo',
	rather than the full '/dev/md/foo'.
   -    Improvements for assembling member arrays of containers.
   -    Improvements to test suite
   -    Add option to change increment for RebuildNN messages reported
	by "mdadm --monitor"
   -    Improvements to mdmon 'hand-over' from initrd to final root.
   -    Handle merging of devices that have left an IMSM array and are
	being re-incorporated.
   -    Add missing space in "--detail --brief" output.
	
Changes Prior to release 3.0.2
   -    Fix crash when hosthost is not set, as often happens in
	early boot.

Changes Prior to release 3.0.1
   -    Fix various segfaults
   -    Fixed for --examine with containers
   -    Lots of other little fixes.
	
Changes Prior to release 3.0
   -    Support for externally managed metadata, specifically DDF and IMSM.
   -    Depend on udev to create entries in /dev, rather than creating them
	ourselves.
   -    remove --auto-update-home-hosts
   -    new config file line "auto"
   -    new "<ignore>" and "any" options for "homehost"
   -    numerous bug fixes and minor enhancements.
