btrfs-progs-5.3 (2019-10-18)
  * mkfs:
    * new option to specify checksum algorithm (only crc32c)
    * fix xattr enumeration
  * dump-tree: BFS (breadth-first) traversal now default
  * libbtrfsutil: remove stale BTRFS_DEV_REPLACE_ITEM_STATE_x defines
  * ci: add support for gitlab
  * other:
    * preparatory work for more checksum algorithms
    * docs update
    * switch to docbook5 backend for asciidoc
    * fix build on uClibc due to missing backtrace()
    * lots of printf format fixups

btrfs-progs-5.2.2 (2019-09-05)
  * check:
    * fix false report of wrong byte count for orphan inodes
    * option -E was not handled correctly
    * new check and repair for root item generation
  * balance: check for full-balance before background fork
  * mkfs: check that total device size does not overflow 16EiB
  * dump-tree: print DEV_STATS key type
  * other:
    * new and updated tests
    * doc fixups and updates

btrfs-progs-5.2.1 (2019-07-26)
  * scrub status: fix ETA calculation after resume
  * check: fix crash when using -Q
  * restore: fix symlink owner restoration
  * mkfs: fix regression with mixed block groups
  * core: fix commit to process all delayed refs
  * other:
    * minor cleanups
    * test updates

btrfs-progs-5.2 (2019-07-05)
  * subvol show: print qgroup information when available
  * scrub:
    * status: show ETA, revamp the whole output
    * fix reading/writing of last position on resume/cancel, potentially
      skipping part of the filesystem on next resume
  * dump-tree: add new option --noscan to use only devices given on the
    commandline
  * all-in-one binary (busybox style) with mkfs.btrfs, btrfs-image,
    btrfs-convert, btrfstune
  * image: fix hang when there are more than 32 cpus online and compression is
    requested
  * convert: fix some false ENOSPC errors when --rootdir is used
  * build: fix gcc9 warnings
  * core changes
    * command handling cleanups
    * dead code removal
    * cmds-* files moved to cmds/
    * other shared userspace files moved to common/
    * utils.c split into more files
    * preparatory work for more output formats
    * libbtrfsutil: fix unaligned access
  * other
    * new and updated tests
    * fix tests so CI passes again
    * sb-mod can modify more superblock items

btrfs-progs-5.1.1 (2019-06-11)
  * convert and mkfs will try to use optimized crc32c
  * fi show: accept a file-backed image
  * fi show: fix possible crash when device is deleted in parallel
  * build:
    * support extra flags for python bindings
    * separate LDFLAGS for libbtrfsutil
  * other:
    * space reservation fixes or debugging improvements
    * V0 extent code removed
    * more tests and cleanups

btrfs-progs-5.1 (2019-05-17)
  * (version 5.0 skipped)
  * check:
    * repair: flush/FUA support to avoid breaking metadata COW
    * file extents repair no longer relies on data in extent tree
    * lowmem: fix false error reports about gaps between extents
    * add inode mode check and repair for various objects
    * add check for invalid combination of nocow/compressed extents
  * device scan: new option to forget scanned devices
  * mkfs: use same chunk size as kernel for initial creation
  * dev-replace: better report when other exclusive operation is running
  * help: for syntax errors on command line, print only the relevant messages,
    not the whole help text
  * receive:
    * new option for quiet mode
    * on -vv print information about written ranges
    * fix endless loop with --dump on an invalid stream
  * defrag: able open files in RO mode (needs kernel support to work)
  * dump-tree: --block can be specified multiple times
  * libbtrfsutil: fix: don't close fd on error in btrfs_util_subvolume_id_fd
  * core:
    * add sync before superblock write
    * better error handling on the transaction commit path
    * try to find best copy when reading tree blocks
    * update backup roots on commit transaction
  * other:
    * fuzz tests pass and are enabled in CI
    * cleanups
    * new tests

btrfs-progs-4.20.2 (2019-02-25)
  * ci: use newer distro for builds
  * dump-super: minor output fixup
  * revert fix for prefix detection of receive path, this is temporary and
    unbreaks existing user setups

btrfs-progs-4.20.1 (2019-01-23)
  * libbtrfs: fix build of external tools due to missing symbols
  * ci: enable library test

btrfs-progs-4.20 (2019-01-19)
  * new feature: metadata uuid
    * lightweight change of UUID without rewriting all metadata
      (incompatible change)
    * done by btrfstune -m/-M
    * needs kernel support, 5.0+
  * image:
    * fix block groups when restoring from multi-device image
    * only enlarge result image if it's a regular file
  * check
    * more device extent checks and fixes
    * can repair dir item with mismatched hash
  * mkfs: uuid tree created with proper contents
  * fix mount point detection due to partial prefix match
  * other:
    * new tests
    * libbtrfsutil: fix tests if kernel lacks support for new subvolume ioctls
    * build fixes
    * doc fixes

btrfs-progs-4.19.1 (2018-12-05)
  * build fixes
    * big-endian builds fail due to bswap helper clashes
    * 'swap' macro is too generic, renamed to prevent build failures
  * libbtrfs
    * minor version update to 1.1.0
    * fix default search to top=0 as documented
    * rename 'async' to avoid future python binding problems
    * add support for unprivileged subvolume listing ioctls
    * added tests, API docs
  * other
    * lot of typos fixed
    * warning cleanups
    * doc formatting updates
    * CI tests against zstd 1.3.7

btrfs-progs-4.19 (2018-11-03)
  * check: support repair of fs with free-space-tree feature
  * core:
    * port delayed ref infrastructure from kernel
    * support write to free space tree
  * dump-tree: new options for BFS and DFS enumeration of b-trees
  * quota: rescan is now done automatically after 'assign'
  * btrfstune: incomplete fix to uuid change
  * subvol: fix 255 char limit checks
  * completion: complete block devices and now regular files too
  * docs:
    * ship uncompressed manual pages
    * btrfsck uses a manual page link instead of symlink
  * other
    * improved error handling
    * docs
    * new tests

btrfs-progs-4.17.1 (2018-08-06)
  * check:
    * add ability to fix wrong ram_bytes for compressed inline files
    * beautify progress output
  * btrfstune: allow to continue uuid change after unclean interruption
  * several fuzz fixes:
    * detect overlapping chunks
    * chunk loading error handling
    * don't crash with unexpected root refs to extents
  * relax option parsing again to allow mixing options and non-options
    arguments
  * fix qgroup rescan status reporting
  * build:
    * drop obsolete dir-test
    * new configure option to disable building of tools
    * add compatibility options --disable-static and --disable-shared
  * other:
    * cleanups and preparatory work
    * new test images

btrfs-progs-4.17 (2018-06-14)
  * check
    * many lowmem mode improvements
    * properly report qgroup mismatch errors
    * check symlinks with append/immutable flags
  * fi usage
    * correctly calculate allocated/unallocated for raid10
    * minor output updates
  * mkfs
    * detect ENOSPC on thinly provisioned devices
    * fix spurious EEXIST during directory traversal
  * restore: fix relative path for restore target
  * dump-tree: print symbolic tree names for backrefs
  * send: fix regression preventing send -p with subvolumes mounted on "/"
  * corrupt-tree: refactoring and command line updates
  * build
    * make it work with e2fsprogs < 1.42 again
    * restore support for autoconf 2.63
    * detect if -std=gnu90 is supported
  * other
    * new tests
    * cleanups

btrfs-progs-4.16.1 (2018-04-24)
  * remove obsolete tools: btrfs-debug-tree, btrfs-zero-log, btrfs-show-super,
    btrfs-calc-size
  * sb-mod: new debugging tool to edit superblock items
  * mkfs: detect if thin-provisioned device does not have enough space
  * check: don't try to verify checksums on metadata dump images
  * build: fail documentation build if xmlto is not found
  * build: fix build of btrfs.static

btrfs-progs-4.16 (2018-04-06)
  * libbtrfsutil - new LGPL library to wrap userspace functionality
    * several 'btrfs' commands converted to use it:
      * properties
      * filesystem sync
      * subvolume set-default/get-default/delete/show/sync
    * python bindings, tests
  * build
    * use configured pkg-config path
    * CI: add python, musl/clang, built dependencies caching
    * convert: build fix for e2fsprogs 1.44+
    * don't install library links with wrong permissions
  * fixes
    * prevent incorrect use of subvol_strip_mountpoint
    * dump-super: don't verify csum for unknown type
    * convert: fix inline extent creation condition
  * check:
    * lowmem: fix false alert for 'data extent backref lost for snapshot'
    * lowmem: fix false alert for orphan inode
    * lowmem: fix false alert for shared prealloc extents
  * mkfs:
    * add UUID and otime to root of FS_TREE - with the uuid, snapshots will
      be now linked to the toplevel subvol by the parent UUID
    * don't follow symlinks when calculating size
    * pre-create the UUID tree
    * fix --rootdir with selinux enabled
  * dump-tree: add option to print only children nodes of a given block
  * image: handle missing device for RAID1
  * other
    * new tests
    * test script cleanups (quoting, helpers)
    * tool to edit superblocks
    * updated docs

btrfs-progs-4.15.1 (2018-02-16)
  * build
    * fix build on musl
    * support asciidoctor for doc generation
  * cleanups
    * sync some code with kernel
    * check: move code to own directory, split to more files
  * tests
    * more build tests in travis
    * tests now pass with asan and ubsan
    * testsuite can be exported and used separately

btrfs-progs-4.15 (2018-02-01)
  * mkfs --rootdir reworked, does not minimize the final image but can be still
    done using a new option --shrink
  * fix allocation of system chunk, don't allocate from the reserved area
  * other
    * new and updated tests
    * cleanups, refactoring
    * doc updates

btrfs-progs-4.14.1 (2018-01-05)
  * dump-tree: print times of root items
  * check: fix several lowmem mode bugs
  * convert: fix rollback after balance
  * other
    * new and updated tests, enabled lowmem mode in CI
    * docs updates
    * fix travis CI build
    * build fixes
    * cleanups

btrfs-progs-4.14 (2017-11-16)
  * build: libzstd now required by default
  * check: more lowmem mode repair enhancements
  * subvol set-default: also accept path
  * prop set: compression accepts no/none, same as ""
  * filesystem usage: enable for filesystem on top of a seed device
  * rescue: new command fix-device-size
  * other
    * new tests
    * cleanups and refactoring
    * doc updates

btrfs-progs-4.13.3 (2017-10-16)
  * check: fix --force, wrong check for a mounted block device
  * build: fix --with-convert parsing
  * subvol list: don't list TOPLEVEL
  * other: update tests

btrfs-progs-4.13.2 (2017-10-06)
  * subvol list:
    * don't list toplevel subvolume among deleted (broken since 4.8.3)
    * minor adjustments of uuid print format
  * subvol delete:
    * fix swapped behaviour of --commit-each and --commit-after
    * fix potentially lost sync if subvolumes are from different filesystems
  * check: add cache for metadata blocks, should improve performance
  * other:
    * new tests, testsuite updates
    * doc updates
    * cleanups

btrfs-progs-4.13.1 (2017-09-25)
  * image: speed up generating the sanitized names, do not generate unprintable chars
  * completion: add missing commands, better mount point detection
  * restore: add zstd support; libzstd detected automatically, will be
    requested by default in the future, or can be configured out
  * other:
    * misc fixes found by sparse
    * doc enhancements, ioctl manual page started
    * updated and new tests
    * build fixes

btrfs-progs-4.13 (2017-09-08)
  * convert: reiserfs support
  * check: new option --force to allow check of a mounted filesystem (no repair)
  * mkfs: --rootdir will now copy special files
  * dump-tree: minor output changes
  * inspect rootid: accept file as argument
  * dev usage: don't calculate slack space for missing devices
  * fi du: don't print error on EMPTY_SUBVOL (inode number 2)
  * build:
    * fixed support for sanitization features on gcc (tsan, asan, ubsan)
    * fix PIE build
  * other:
    * misc cleanups and stability fixes
    * travis CI enhancements
    * new tests, fuzzed images
    * testsuite cleanups

btrfs-progs-4.12.1 (2017-08-25)
  * build:
    * fix cross-compilation
    * use gnu90 explicitly
  * dump-tree: more relaxed checks so -b can print block on a damaged fs
  * convert: fix the 1MB range exclusion
  * check: more dir_item hash checks
  * other
    * added missing getopt spec for some options
    * doc fixes
    * cleanups
    * test updates

btrfs-progs-4.12 (2017-07-26)
  * subvol show: new options --rootid, --uuid to show subvol by the given spec
  * convert: progress report fixes, found by tsan
  * image: progress report fixes, found by tsan
  * fix infinite looping in find-root, or when looking for free extents
  * other:
    * code refactoring
    * docs updates
    * build: ThreadSanitizer support
    * tests: stricter checks for mounted filesystem

btrfs-progs-4.11.1 (2017-06-30)
  * image: restoring from multiple devices
  * dev stats: make --check option work
  * check: fix false alert with extent hole on a NO_HOLE filesystem
  * check: lowmem mode, fix false alert in case of mixed inline and compressed
    extent
  * convert: work with large filesystems (many TB)
  * convert: fix overwriting of eb header flags
  * convert: do not clear NODATASUM flag in inodes when run with --no-datasum
  * docs updates
  * build: sync Android.mk with Makefile
  * tests:
    * new tests
    * fix 008 and 009, shell quotation mistake

btrfs-progs-4.11 (2017-05-18)
  * receive: fix handling empty stream with -e (multi-stream)
  * send dump: fix printing long file names
  * stability fixes for: dump-super, print-tree, check
  * option parser updates: global options are parsed before the subcommand name
    (old xfstests will fail)
  * new and updated tests
  * documentation updates

btrfs-progs-4.10.2 (2017-03-31)
  * check: lowmem mode fix for false alert about lost backrefs
  * convert: minor bugfix
  * library: fix build, missing symbols, added tests

btrfs-progs-4.10.1 (2017-03-17)
  * receive: handle subvolume in path clone
  * convert: rollback fixed (rewrite was needed to address previous design issues)
  * build: fix build of 3rd party tools, missing <linux/sizes.h>
  * dump-tree: print log trees
  * other
    * new and updated tests

btrfs-progs-4.10 (2017-03-08)
  * send: dump output fixes: missing newlies
  * check: several fixes for the lowmem mode, improved error reporting
  * build
    * removed some library deps for binaries that not use them
    * ctags, cscope
    * split Makefile to the autotool generated part and the rest, not needed
      to autogen.sh after adding a file
  * shared code: sync easy parts with kernel sources
  * other
    * lots of cleanups
    * source file reorganization: convert, mkfs, utils
    * lots of spelling fixes in docs, other updates
    * more tests

btrfs-progs-4.9.1 (2017-01-27)
  * check:
    * use correct inode number for lost+found files
    * lowmem mode: fix false alert on dropped leaf
  * size reports: negative numbers might appear in size reports during device
    deletes (previously in EiB units)
  * mkfs: print device being trimmed
  * defrag: v1 ioctl support dropped
  * quota: print message before starting to wait for rescan
  * qgroup show: new option to sync before printing the stats
  * other:
    * corrupt-block enhancements
    * backtrace and co. cleanups
    * doc fixes

btrfs-progs-4.9 (2016-12-23)
  * check: many lowmem mode updates
  * send: use splice syscall to copy buffer from kernel
  * receive: new option to dump the stream in textual form
  * convert:
    * move sources to own directory
    * prevent accounting of blocks beyond end of the device
    * make it work with 64k sectorsize
  * mkfs: move sources to own directory
  * defrag: warns if directory used without -r
  * dev stats:
    * new option to check stats for non-zero values
    * add long option for -z
  * library: version bump to 0.1.2, added subvol_uuid_search2
  * other:
    * cleanups
    * docs updates

btrfs-progs-4.8.5 (2016-11-30)
  * receive: fix detection of end of stream (error reported even for valid
    streams)
  * other:
    * added test for the receive bug
    * fix linking of library-test

btrfs-progs-4.8.4 (2016-11-25)
  * check: support for clearing space cache v2 (free-space-tree)
  * send:
    * more sanity checks (with tests), cleanups
    * fix for fstests/btrfs/038 and btrfs/117 failures
  * build:
    * fix compilation of standalone ioctl.h, pull NULL definition
    * fix library link errors introduced in 4.8.3
  * tests:
    * add more fuzzed images from bugzilla
    * add bogus send stream checks
    * fixups and enhancements for CI environment builds
    * misc refinements and updates of testing framework
  * other:
    * move sources for btrfs-image to own directory
    * deprecated and not build by default: btrfs-calc-size, btrfs-show-super
    * docs updates

btrfs-progs-4.8.3 (2016-11-11)
  * check:
    * support for clearing space cache (v1)
    * size reduction of inode backref structure
  * send:
    * fix handling of multiple snapshots (-p and -c options)
    * transfer buffer increased (should reduce number of context switches)
    * reuse existing file for output (-f), eg. when root cannot create files (NFS)
  * dump-tree:
    * print missing items for various structures
    * new: dev stats, balance status item
    * sync key names with kernel (the persistent items)
  * subvol show: now able to print the toplevel subvolume -- the creation time
    might be wrong though
  * mkfs:
    * store the creation time of toplevel root inode
    * print UUID in the summary
  * build: travis CI for devel
  * other:
    * lots of cleanups and refactoring
    * switched to on-stack path structure
    * fixes from coverity, asan, ubsan
    * new tests
    * updates in testing infrastructure
    * fixed convert test 005

btrfs-progs-4.8.2 (2016-10-26)
  * convert: also convert file attributes
  * convert: fix wrong tree block alignment for unaligned block group
  * check: quota verify fixes, handle reloc tree
  * build: add stub for FIEMAP_EXTENT_SHARED, compiles on ancient kernels
  * build: add stub for BUILD_ASSERT when ioctl.h is included
  * dump-tree: don't crash on unrecognized tree id for -t
  * tests:
    * add more ioctl tests
    * convert: more symlink tests, attribute tests
    * quota verify for reloc tree
  * other cleanups

btrfs-progs-4.8.1 (2016-10-12)
  * 32bit builds fixed
  * build without backtrace support fixed

btrfs-progs-4.8 (2016-10-05)
  * error handling improvements all over the place
  * new fuzzed images, test updates
  * doc fixups
  * minor cleanups and improvements
  * kernel library helpers moved to own directory
  * qgroup: fix regression leading to incorrect status after check,
    introduced in 4.7

btrfs-progs-4.7.3 (2016-09-21)
  * fixed free space tree compat status
  * check: low-mem mode: handle partially dropped snapshots
  * dump-super: consolidate options for superblock copy
  * tree-stats: check mount status
  * subvol delete: handle verbosity option
  * defrag: print correct error string
  * mkfs: fix reading rotational status
  * other:
    * UBSAN build option
    * documentation updates
    * enhanced tests: convert, fuzzed images, more tools to run on fuzzed
      images

btrfs-progs-4.7.2 (2016-09-05)
  * check:
    * urgent fix: false report of backref mismatches; do not --repair
      last unaffected version 4.6.1 (code reverted to that state)
  * fuzzing and fixes
    * added more sanity checks for various structures
    * testing images added
  * build: udev compatibility: do not install .rules on version < 190
  * other:
    * dump-super: do not crash on garbage value in csum_type
    * minor improvements in messages and help strings
  * documentation:
    * filesystem features

btrfs-progs-4.7.1 (2016-08-25)
  * check:
    * new optional mode: optimized for low memory usage (memory/io tradeoff)
    * --mode=lowmem, not default, still considered experimental
    * does not work with --repair yet
  * convert: regression fix, ext2_subvol/image rw permissions
  * mkfs/convert:
    * two-staged creation, partially created filesystem will not be recognized
    * improved error handling (fewer BUG_ONs)
  * convert: preparation for more filesystems to convert from
  * documentation updates: quota, qgroup
  * other
    * message updates
    * more tests
    * more build options, enhanced debugging

btrfs-progs-4.7 (2016-07-29)
  * convert: fix creating discontig extents
  * check: speed up traversing heavily reflinked extents within a file
  * check: verify qgroups of higher levels
  * check: repair can now fix wrong qgroup numbers
  * balance: new option to run in the background
  * defrag: default extent target size changed to 32MiB
  * du: silently skip non-btrfs dirs/files
  * documentation updates: btrfs(5), btrfs(8), balance, subvolume, scrub,
    filesystem, convert
  * bugfixes:
    * unaligned access (reported for sparc64) in raid56 parity calculations
    * use /bin/bash
    * other stability fixes and cleanups
  * more tests

btrfs-progs-4.6.1 (2016-06-24)
  * filesystem resize: negative resize argument accepted again
  * qgroup rescan: fix skipping when rescan is in progress
  * mkfs: initialize stripesize to correct value
  * testsuite updates, mostly convert tests
  * documentation updates
    * btrfs-device, btrfs-restore manual pages enhanced
    * misc fixups

btrfs-progs-4.6 (2016-06-10)
  * convert - major rewrite:
    * fix a long-standing bug that led to mixing data blocks into metadata block
      groups
    * the workaround was to do full balance after conversion, which was
      recommended practice anyway
    * explicitly set the lowest supported version of e2fstools to 1.41
  * provide and install udev rules file that addresses problems with device
    mapper devices, renames after removal
  * send: new option: quiet
  * dev usage: report slack space (device size minus filesystem area on the dev)
  * image: support DUP
  * build: short options to enable debugging builds
  * other:
    * code cleanups
    * build fixes
    * more tests and other enhancements

btrfs-progs-4.5.3 (2016-05-11)
  * ioctl: fix unaligned access in buffer from TREE_SEARCH; might cause SIGBUS
    on architectures that do not support unaligned access and do not performa
    any fixups
  * improved validation checks of superblock and chunk-related structures
  * subvolume sync: fix handling of -s option
  * balance: adjust timing of safety delay countdown with --full-balance
  * rescue super-recover: fix reversed condition check
  * check: fix bytes_used accounting
  * documentation updates: mount options, scrub, send, receive, select-super,
    check, mkfs
  * testing: new fuzzed images, for superblock and chunks

btrfs-progs-4.5.2 (2016-05-02)
  * new/moved command: btrfs-calc-stats -> btrfs inspect tree-stats
  * check: fix false alert for metadata blocks crossing stripe boundary
  * check: catch when qgroup numbers mismatch
  * check: detect running quota rescan and report mismatches
  * balance start: add safety delay before doing a full balance
  * filesystem sync: is now silent
  * filesystem show: don't miss filesystems with partially matching uuids
  * dev ready: accept only one argument for device
  * dev stats: print "devid:N" for a missing device instead of "(null)"
  * other:
    * lowest supported version of e2fsprogs is 1.41
    * minor cleanups, test updates

btrfs-progs-4.5.1 (2016-03-31)
  * mkfs: allow DUP on multi-device filesystems
  * bugfixes: build fixes, assorted other fixes

btrfs-progs-4.5 (2016-03-20)
  New/moved commands:
    * btrfs-show-super -> btrfs inspect-internal dump-super
    * btrfs-debug-tree -> btrfs inspect-internal dump-tree

  New commands:
    * btrfs filesystem du - calculate disk usage, including shared extents

  Enhancements:
    * device delete - delete by id (needs kernel support, not merged to
      4.6)
    * check - new option to specify chunk root
    * debug-tree/dump-tree - option -t understands human readable name of
      the tree (along numerical ids)
    * btrfs-debugfs - can dump block group information

  Bugfixes:
    * all commands should accept the option separator "--"
    * several fixes in device scan
    * restore works on filesystems with sectorsize > 4k
    * debug-tree/dump-tree - print compression type as string
    * subvol sync: fix crash, memory corruption
    * argument parsing fixes: subvol get-default, qgroup create/destroy/
      assign, inspect subvolid-resolve
    * check for block device or regular file in several commands

  Other:
    * documentation updates
    * manual pages for the moved tools now point to btrfs-filesystem
    * testsuite updates

btrfs-progs-4.4.1 (2016-02-26)
  * find-root: don't skip the first chunk
  * free-space-tree compat bits fix
  * build: target symlinks
  * documentation updates
  * test updates

btrfs-progs-4.4 (2016-01-18)
  User visible changes:
    * mkfs.btrfs --data dup

  People asked about duplicating data on a single device for a long time. There
  are no technical obstacles preventing that, so it got enabled with a warning
  about potential dangers when the device will not do the duplicated copies. See
  mkfs.btrfs section DUP PROFILES ON A SINGLE DEVICE.

    * support balance filters added/enhanced in linux 4.4
      * usage=min..max -- enhanced to take range
      * stripes=min..max -- new, filter by stripes for raid0/10/5/6
      * limit=min..max -- enhanced to take range
  Note: due to backward compatibility, the range maximum for 'usage' is not
  inclusive as for the others, to keep the same behaviour as usage=N .

    * manual pages enhanced (btrfs, mkfs, mount, filesystem, balance)
    * error messages updates, rewordings -- some fstests may break due to that
    * added support for free-space-tree implementation of space cache -- this
      requires kernel 4.5 and is not recommended for non-developers yet
    * btrfs filesystem usage works with mixed blockgroups

  Other:
    * installation to /usr/local -- this has unintentionally changed during
      conversion to autotools in 3.19
    * check: fix a false alert where extent record has wrong metadata flag
    * improved stability on fuzzed/crafted images when reading sys array in
      superblock
    * build: the 'ar' tool is properly detected during cross-compilation
    * debug-tree: option -t understands ids for tree root and chunk tree
    * preparatory work for btrfs-convert rewrite
    * sparse, gcc warning fixes
    * more memory allocation failure handling
    * cleanups
    * more tests

  Bugfixes:
    * chunk recovery: fix floating point exception
    * chunk recovery: endianity bugfix during rebuild
    * mkfs with 64K pages and nodesize reported superblock checksum mismatch
    * check: properly reset nlink of multi-linked file

btrfs-progs-4.3.1 (2015-11-16)
  * fixes
    * device delete: recognize 'missing' again
    * mkfs: long names are not trimmed when doing ssd check
    * support partitioned loop devices
  * other
    * replace several mallocs with on-stack variables
    * more memory allocation failure handling
    * add tests for bugs fixed
    * cmd-device: switch to new message printing helpers
    * minor code cleanups

btrfs-progs-4.3 (2015-11-06)
  * mkfs
    * mixed mode is not forced for filesystems smaller than 1GiB
    * mixed mode broken with mismatching sectorsize and nodesize, fixed
    * print version info earlier
    * print devices sorted by id
    * do not truncate target image with --rootsize
  * filesystem usage:
    * don't print global block reserve
    * print device id
    * minor output tuning
    * other cleanups
  * calc-size:
    * div-by-zero fix on an empty filesystem
    * fix crash
  * bugfixes:
    * more superblock sanity checks
    * consistently round size of all devices down to sectorsize
    * misc leak fixes
    * convert: don't try to rollback with a half-deleted ext2_saved
      subvolume
  * other:
    * check: add progress indicator
    * scrub: enhanced error message
    * show-super: read superblock from a given offset
    * add README
    * docs: update manual page for mkfs.btrfs, btrfstune, balance,
      convert and inspect-internal
    * build: optional build with more warnings (W=...)
    * build: better support for static checkers
    * build: html output of documentation
    * pretty-print: last_snapshot for root_item
    * pretty-print: stripe dev uuid
    * error reporting wrappers, introduced and example use
    * refactor open_file_or_dir
    * other docs and help updates
  * testing:
    * test for nodes crossing stripes
    * test for broken 'subvolume sync'
    * basic tests for mkfs, raid option combinations
    * basic tests for fuzzed images (check)
    * command instrumentation (eg valgrind)
    * print commands if requested
    * add README for tests

btrfs-progs-4.2.3 (2015-10-19)
  * subvol sync: make it actually work again: it's been broken since 4.1.2,
    due to a reversed condition it returned immediately instead of waiting
  * scanning: do not scan already discovered filesystems (minor optimization)
  * convert: better error message in case the filesystem is not finalized
  * restore: off-by-one symlink path check fix

btrfs-progs-4.2.2 (2015-10-05)
  * filesystem label: use fallback if the label ioctl is not available
  * convert: check nodesize constraints against commandline features (-O)
  * scrub: report status 'running' until all devices are finished
  * device scanning might crash in some scenarios
  * filesystem usage: print summary for non-root users

btrfs-progs-4.2.1 (2015-09-20)
  * fix an off-by-one error in cross-stripe boundary check
    * if nodesize was 64k, any metadata block was reported as crossing,
      this leads to mkfs failure for example due to "no free blocks
      found"
    * for other nodesizes, if the end of the metadata block was 64k
      aligned, it was incorrectly reported by fsck
  * convert: don't write uninitialized data to image
  * image:
    * don't loop with option -t0
    * don't create threads if compression is not requested
  * other: minor cleanups

btrfs-progs-4.2 (2015-09-03)
  * enhancements:
    * mkfs: do not create extra single chunks on multiple devices
    * resize: try to guess the minimal size, 'inspect min-dev-size'
    * qgroup assign: add option to schedule rescan
    * chunk-recover: be more verbose about the scanning process
  * fixes:
    * check:
	* find stripes crossing stripe boundary -- created by convert
	* print correct range for file hole when there are no extents
	  and learn how to fix it
    * replace: more sanity checks
    * convert: concurrency fixes related to reporting progress
    * find-root: option -a will not skip the current root anymore
    * subvol list: fix occasional crash
    * do not create stripes crossing stripe boundary
  * build:
    * fixes for musl libc
    * preliminary support for android (not working yet, more code changes
      needed)
    * new EXTRA_CFLAGS and EXTRA_LDFLAGS
  * other:
    * lots of cleanups
    * tests: lots of updates, new tests, framework improvements
    * documentation updates
    * debugging: print-tree shows stripe length

btrfs-progs-4.1.2 (2015-07-14)
  * urgent bugfix: mkfs creates invalid filesystem, must be recreated

btrfs-progs-4.1.1 (2015-07-10) -- Do not use this version!
  Bugfixes:
    * defrag: threshold overflow fix
    * fsck:
      * check if items fit into the leaf space
      * fix wrong nbytes
    * mkfs:
      * create only desired block groups for single device
      * preparatory work for fix on multiple devices
  Enhancements:
    * new alias for 'device delete': 'device remove'
  Other:
    * fix compilation on old gcc (4.3)
    * documentation updates
    * debug-tree: print nbytes
    * test: image for corrupted nbytes
    * corrupt-block: let it kill nbytes

btrfs-progs-4.1 (2015-06-22)
  Bugfixes:
    * fsck.btrfs: no bash-isms
    * bugzilla 97171: invalid memory access (with tests)
    * receive:
      * cloning works with --chroot
      * capabilities not lost
    * mkfs: do not try to register bare file images
    * option --help accepted by the standalone utilities
    
  Enhancements:
    * corrupt block: ability to remove csums
    * mkfs:
      * warn if metadata redundancy is lower than for data
      * options to make the output quiet (only errors)
      * mixed case names of raid profiles accepted
      * rework the output:
      * more comprehensive, 'key: value' format
    * subvol:
      * show:
	* print received uuid
	* update the output
	* new options to specify size units
      * sync: grab all deleted ids and print them as they're removed,
	previous implementation only checked if there are any to be
	deleted - change in command semantics
    * scrub: print timestamps in days HMS format
    * receive:
      * can specify mount point, do not rely on /proc
      * can work inside subvolumes
    * send: new option to send stream without data (NO_FILE_DATA)
    * convert: specify incompat features on the new fs
    * qgroup:
      * show: distinguish no limits and 0 limit value
      * limit: ability to clear the limit
    * help for 'btrfs' is shorter, 1st level command overview
    * debug tree: print key names according to their C name

  New:
    * rescue zero-log
    * btrfsune:
      * rewrite uuid on a filesystem image
      * new option to turn on NO_HOLES incompat feature

  Deprecated:
    * standalone btrfs-zero-log

  Other:
    * testing framework updates
      * uuid rewrite test
      * btrfstune feature setting test
      * zero-log tests
      * more testing image formats
    * manual page updates
    * ioctl.h synced with current kernel uapi version
    * convert: preparatory works for more filesystems (reiserfs pending)
    * use static buffers for path handling where possible
    * add new helpers for send uilts that check memory allocations,
      switch all users, deprecate old helpers
    * Makefile: fix build dependency generation
    * map-logical: make it work again

btrfs-progs-4.0.1 (2015-05-20)
  * restore:
    * can restore symlinks, new option --symlinks
    * long option variants added
  * convert: dropped dependency on acl.h header and libacl is not required
    for build
  * fix for 'check' crash
  * device remove error message fix
  * preparatory works for fsid change

btrfs-progs-4.0 (2015-04-29)
  * resize:
    * don't accept file as an argument (it's confusing)
    * print better error message in case of an error
  * restore: optionally restore metadata (time, mode, uid/gid)
  * receive: optionally enforce chroot
  * new rescue subcommand 'zero-log', same as btrfs-zero-log, but now also
    part of the main utility
  * check:
    * free space checks match kernel, fixes incorrect reports
  * convert: fix setting of checksum bit if --no-datasum is used
  * fsck.btrfs: don't print messages
  * fix quota rescan on PPC64 (mangled ioctl number)
  * test updates
  * documentation: files renamed to .asciidoc, misc fixups

btrfs-progs-3.19.1 (2015-03-25)
  * convert:
    * new option to specify metadata block size
    * --no-progress actually works
  * restore: properly handle the page boundary corner case
  * build fixes:
    * missing macro from public header, BTRFS_BUILD_VERSION
    * wrong handling of --enable-convert
  * filesystem usage: reports correct space for degraded mounts
  * other:
    * mkfs: help string updates
    * completion: added 'usage' subcommands
    * cleanups in qgroup code, preparatory work

btrfs-progs-3.19 (2015-03-11)
  * build converted to autotools
  * btrfs-image
    * restore can now run in parallel threads
    * fixed restore of multiple image from multiple devices onto a single
      dev
    * introduced metadump v2
  * check: make --init-csum-tree and --init-extent-tree work together
  * find-new: option to search through all metadata even if a root was
    already found
  * convert: show progress by default, can be turned off
  * corrupt-block: option to work on a specific root
  * bash completion script for all subcommands

btrfs-progs-3.18.2 (2015-01-27)
  * qgroup show: print human readable sizes, options to say otherwise
  * check: new option to explicitly say no to writes
  * mkfs: message about trimming is not printed to stderr
  * filesystem show: fixed return value
  * tests: new infrastructure
  * btrfstune: force flag can be used together with seeding option
  * backtrace support is back
  * getopt cleanups
  * doc and help updates

btrfs-progs-3.18.1 (2015-01-09)
  * minor fixes
  * documentation updates

btrfs-progs-3.18 (2014-12-30)
  * mkfs - skinny-metadata feature is now on by default, first introduced in
    kernel 3.10
  * filesystem usage - give an overview of fs usage in a way that's more
    comprehensible than existing 'filesystem df'
  * device usage - more detailed information about per-device allocations
  * check
    * option to set a different tree root byte number
    * ability to link lost files to lost+found, caused by a recent kernel
      bug
    * repair of severely corrupted fs (use with care)
  * convert - option to show progress
  * subvol create - print the commit mode inline, print the global mode only
    if --verbose
  * other updates: musl-libc support, coverity bugfixes, new test images,
    documentation

btrfs-progs-3.17.3 (2014-12-04)
  * convert: fix conversion of sparse ext* filesystems
  * show: resolve to the correct path
  * fsck: more verbose error for root dir problems

btrfs-progs-3.17.2 (2014-11-19)
  * check improvements
    * add ability to replace missing dir item/dir indexes
    * fix missing inode items
    * create missing root dirid
  * corrupt block: enhancements for testing fsck
  * zero-log: able to reset a fs with bogus log tree pointer (bug_72151)

btrfs-progs-3.17.1 (2014-11-04)
  * filesystem df: argument handling
  * fix linking with libbtrfs
  * replace: better error reporting
  * filesystem show: fixed stall if run concurrently with balance
  * check: fixed argument parsing for --subvol-extents
  * filesystem df: SI prefixes corrected

btrfs-progs-3.17 (2014-10-17)
  * check: --init-csum-tree actually does something useful, rebuilds the
    whole csum tree
  * /dev scanning for btrfs devices is gone
  * /proc/partitions scanning is gone, blkid is used exclusively
  * new subcommand subvolume sync
  * filesystem df: new options to set unit format
  * convert: allow to copy label from the origin, or specify a new one

btrfs-progs-3.16.2 (2014-10-01)
  * a few fixes in fsck and image tools

btrfs-progs-3.16.1 (2014-09-15)
  * print GlobalReserve in filesystem df output
  * new option -R in subvol list
  * library version defines
  * static build is fixed
  * build without documentation is possible

btrfs-progs-3.16 (2014-08-26)
  * mkfs: new option to specify UUID, drop experimental notice
  * check: new option to verify quotas, reduced memory requirements, new
    option to print extent sharing
  * restore: check length before decompression, more error handling, option
    to loop during restoring
  * balance: new filter 'limit'
  * recover: allow to read all sb copies
  * btrfstune: new option to force dangerous changes
  * receive: new option to limit number of errors
  * show-super: skip unrecognized sb, add option to force
  * debug-tree: print tree by id
  * documentation updates

btrfs-progs-3.14.2 (2014-05-29)
  * documentation is now written in asciidoc and there are manpages for each
    subcommand
  * misc bugfixes

btrfs-progs-3.14.1 (2014-04-18)
  * properties: fix handling of option -t
  * restore: fix reading of compressed extents
  * minor code and doc updates

btrfs-progs-3.14 (2014-04-06)
  * fsck: fixes and enhancements to --init-extent-tree mode
  * fsck: chunk-recover updates
  * scrub: add force option -f
  * send: check if subvolumes are read-only
  * subvol delete: add options to affect commit behaviour
  * btrfs: add property command group
  * restore: add dry-run option
  * restore: fix restoring of compressed files
  * mkfs: support for no-holes feature
  * mkfs: option -r deals with hardlinks and relative paths
  * mkfs: discard phase is interruptible
  * documentation updates

btrfs-progs-3.12 (2013-11-25)
  * announcement, tarballs
  * first release after 0.19 (2009/06) with a lot of changes
