Hello community,

here is the log from the commit of package btrfsprogs for openSUSE:Factory 
checked in at 2018-05-06 14:57:50
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/btrfsprogs (Old)
 and      /work/SRC/openSUSE:Factory/.btrfsprogs.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "btrfsprogs"

Sun May  6 14:57:50 2018 rev:95 rq:604057 version:4.16.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/btrfsprogs/btrfsprogs.changes    2018-04-20 
17:24:51.900558509 +0200
+++ /work/SRC/openSUSE:Factory/.btrfsprogs.new/btrfsprogs.changes       
2018-05-06 14:57:52.508938275 +0200
@@ -1,0 +2,32 @@
+Fri May  4 00:00:00 CEST 2018 - dste...@suse.cz
+
+- fix installation of btrfs.5.gz
+
+-------------------------------------------------------------------
+Mon Apr 30 14:39:07 UTC 2018 - je...@suse.com
+
+- Fix building on SLE11:
+  * btrfs-progs: convert: fix support for e2fsprogs < 1.42
+  * btrfs-progs: build: detect whether -std=gnu90 is supported
+  * btrfs-progs: build: autoconf 2.63 compatibility
+  * Fixed mismerged addition of libbtrfsutil1 package description
+- Added patches:
+  * 0001-btrfs-progs-convert-fix-support-for-e2fsprogs-1.42.patch
+  * 0002-btrfs-progs-build-autoconf-2.63-compatibility.patch
+  * 0003-btrfs-progs-build-detect-whether-std-gnu90-is-suppor.patch
+
+-------------------------------------------------------------------
+Tue Apr 24 00:00:00 CEST 2018 - dste...@suse.cz
+
+- update to version 4.16.1
+  * 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
+- Remove patch: 0001-btrfs-progs-build-fix-static-build.patch (upstream)
+- Update initrd script
+
+-------------------------------------------------------------------

Old:
----
  0001-btrfs-progs-build-fix-static-build.patch
  btrfs-progs-v4.16.tar.gz

New:
----
  0001-btrfs-progs-convert-fix-support-for-e2fsprogs-1.42.patch
  0002-btrfs-progs-build-autoconf-2.63-compatibility.patch
  0003-btrfs-progs-build-detect-whether-std-gnu90-is-suppor.patch
  btrfs-progs-v4.16.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ btrfsprogs.spec ++++++
--- /var/tmp/diff_new_pack.1M2JH5/_old  2018-05-06 14:57:53.240911416 +0200
+++ /var/tmp/diff_new_pack.1M2JH5/_new  2018-05-06 14:57:53.244911269 +0200
@@ -31,7 +31,7 @@
 %define build_docs     0
 
 Name:           btrfsprogs
-Version:        4.16
+Version:        4.16.1
 Release:        0
 Summary:        Utilities for the Btrfs filesystem
 License:        GPL-2.0-only
@@ -46,7 +46,9 @@
 Source5:        sles11-defaults.h
 
 Patch1:         mkfs-default-features.patch
-Patch2:         0001-btrfs-progs-build-fix-static-build.patch
+Patch2:         0001-btrfs-progs-convert-fix-support-for-e2fsprogs-1.42.patch
+Patch3:         0002-btrfs-progs-build-autoconf-2.63-compatibility.patch
+Patch4:         0003-btrfs-progs-build-detect-whether-std-gnu90-is-suppor.patch
 
 %if %build_docs
 BuildRequires:  asciidoc
@@ -137,6 +139,15 @@
 Conflicts:      udev < %{udev_with_btrfs_builtin}
 BuildArch:      noarch
 
+%description udev-rules
+This package contains the udev rule file for configuring device mapper
+devices that are components of btrfs file systems.  It is meant to be
+used with versions of udev that contain the "built-in" btrfs command
+(v190 and newer).  Older versions of udev will call the version of
+"btrfs ready" contained in the btrfsprogs package, which does the right
+thing.
+%endif
+
 %package -n libbtrfsutil1
 Summary:        Utility library for interacting with Btrfs
 Group:          System/Libraries
@@ -156,19 +167,12 @@
 This package contains the libraries and headers files for developers to
 build applications to interface with Btrfs using libbtrfsutil.
 
-%description udev-rules
-This package contains the udev rule file for configuring device mapper
-devices that are components of btrfs file systems.  It is meant to be
-used with versions of udev that contain the "built-in" btrfs command
-(v190 and newer).  Older versions of udev will call the version of
-"btrfs ready" contained in the btrfsprogs package, which does the right
-thing.
-%endif
-
 %prep
 %setup -q -n btrfs-progs-v%{version}
 %patch1 -p1
 %patch2 -p1
+%patch3 -p1
+%patch4 -p1
 
 %build
 ./autogen.sh
@@ -200,10 +204,12 @@
 
 %if !%build_docs
 cd Documentation
-# fool make to avoid rebuilding some of the sources
+# fool make to avoid rebuilding some of the sources, the final btrfs.5.gz is in
+# the tarball and we have to overwrite it in the installation path
 touch btrfs-man5.5.gz btrfs-man5.asciidoc
-touch btrfs-ioctl.asciidoc touch btrfs-ioctl.3.gz
+touch btrfs-ioctl.asciidoc btrfs-ioctl.3.gz
 make V=1 MV=mv DESTDIR=%{buildroot} prefix=%{_prefix} bindir=%{_sbindir} 
mandir=%{_mandir} libdir=%{_libdir} install
+install -m 0644 btrfs.5.gz %{buildroot}/%{_mandir}/man5
 cd ..
 %endif
 
@@ -216,21 +222,18 @@
 # move some utilities out of /usr/sbin
 mv %{buildroot}/%{_sbindir}/btrfs-map-logical %{buildroot}/%{_bindir}
 # initrd rescue utilities
-install -m 0755 btrfs-zero-log %{buildroot}/%{_sbindir}
 install -m 0755 btrfs-select-super %{buildroot}/%{_sbindir}
 install -m 0755 btrfs-image %{buildroot}/%{_sbindir}
 install -m 0755 btrfstune %{buildroot}/%{_sbindir}
 install -m 0755 btrfs-find-root %{buildroot}/%{_sbindir}
 install -m 0755 -d %{buildroot}/sbin
 ln -s %{_sbindir}/btrfs %{buildroot}/sbin
-ln -s %{_sbindir}/btrfs-zero-log %{buildroot}/sbin
 ln -s %{_sbindir}/btrfs-convert %{buildroot}/sbin
 ln -s %{_sbindir}/btrfs-select-super %{buildroot}/sbin
 ln -s %{_sbindir}/btrfs-image %{buildroot}/sbin
 ln -s %{_sbindir}/btrfstune %{buildroot}/sbin
 ln -s %{_sbindir}/btrfsck %{buildroot}/sbin
 ln -s %{_sbindir}/btrfs-find-root %{buildroot}/sbin
-ln -s %{_sbindir}/btrfs-debug-tree %{buildroot}/sbin
 ln -s %{_sbindir}/mkfs.btrfs %{buildroot}/sbin
 ln -s %{_sbindir}/fsck.btrfs %{buildroot}/sbin
 %if 0%{?suse_version} < 1310
@@ -280,22 +283,18 @@
 /sbin/fsck.btrfs
 # mkinitrd utils
 /sbin/btrfs
-/sbin/btrfs-zero-log
 /sbin/btrfs-convert
 /sbin/btrfs-image
 /sbin/btrfstune
 /sbin/btrfsck
 /sbin/mkfs.btrfs
-/sbin/btrfs-debug-tree
 %{_sbindir}/btrfs
-%{_sbindir}/btrfs-zero-log
 %{_sbindir}/btrfs-convert
 %{_sbindir}/btrfs-image
 %{_sbindir}/btrfstune
 %{_sbindir}/btrfsck
 %{_sbindir}/fsck.btrfs
 %{_sbindir}/mkfs.btrfs
-%{_sbindir}/btrfs-debug-tree
 %if 0%{?suse_version} < 1310
 %dir /lib/mkinitrd
 %dir /lib/mkinitrd/scripts
@@ -310,9 +309,7 @@
 %{_mandir}/man8/btrfs.8.gz
 %{_mandir}/man5/btrfs.5.gz
 %{_mandir}/man8/btrfs-convert.8.gz
-%{_mandir}/man8/btrfs-debug-tree.8.gz
 %{_mandir}/man8/btrfs-map-logical.8.gz
-%{_mandir}/man8/btrfs-zero-log.8.gz
 %{_mandir}/man8/btrfstune.8.gz
 %{_mandir}/man8/btrfs-balance.8.gz
 %{_mandir}/man8/btrfs-check.8.gz
@@ -330,7 +327,6 @@
 %{_mandir}/man8/btrfs-send.8.gz
 %{_mandir}/man8/btrfs-subvolume.8.gz
 %{_mandir}/man8/btrfs-select-super.8.gz
-%{_mandir}/man8/btrfs-show-super.8.gz
 %dir %{_datadir}/bash-completion
 %dir %{_datadir}/bash-completion/completions
 %{_datadir}/bash-completion/completions/btrfs
@@ -347,13 +343,11 @@
 %files -n btrfsprogs-static
 %defattr(-, root, root)
 %{_sbindir}/btrfs.static
-%{_sbindir}/btrfs-zero-log.static
 %{_sbindir}/btrfs-convert.static
 %{_sbindir}/btrfs-image.static
 %{_sbindir}/btrfstune.static
 %{_sbindir}/btrfsck.static
 %{_sbindir}/mkfs.btrfs.static
-%{_sbindir}/btrfs-debug-tree.static
 %{_sbindir}/btrfs-corrupt-block.static
 %{_sbindir}/btrfs-find-root.static
 %{_sbindir}/btrfs-map-logical.static
@@ -376,7 +370,6 @@
 
 %files -n libbtrfsutil-devel
 %defattr(-, root, root)
-%dir %{_includedir}
 %{_includedir}/btrfsutil.h
 %{_libdir}/libbtrfsutil.so
 

++++++ 0001-btrfs-progs-convert-fix-support-for-e2fsprogs-1.42.patch ++++++
>From 1a9818aa0dcbcd48eadbb122a1433497f758db9a Mon Sep 17 00:00:00 2001
From: Jeff Mahoney <je...@suse.com>
Date: Fri, 27 Apr 2018 13:58:41 -0400
Subject: [PATCH 1/3] btrfs-progs: convert: fix support for e2fsprogs < 1.42
Patch-mainline: Submitted, linux-btrfs 26 Apr 2018

Commit 324d4c1857a (btrfs-progs: convert: Add larger device support)
introduced new dependencies on the 64-bit API provided by e2fsprogs.
That API was introduced in v1.42 (along with bigalloc).

This patch maps the following to their equivalents in e2fsprogs < 1.42.
- ext2fs_get_block_bitmap_range2
- ext2fs_inode_data_blocks2
- ext2fs_read_ext_attr2

Since we need to detect and define EXT2_FLAG_64BITS for compatibilty
anyway, it makes sense to use that to detect the older e2fsprogs instead
of defining a new flag ourselves.

Signed-off-by: Jeff Mahoney <je...@suse.com>
---
 configure.ac          |  6 +-----
 convert/source-ext2.h | 12 +++++++++++-
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/configure.ac b/configure.ac
index af13a95..2dea1c6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -140,11 +140,7 @@ BTRFSCONVERT_EXT2=0
 BTRFSCONVERT_REISERFS=0
 if test "x$enable_convert" = xyes; then
        if test "x$with_convert" = "xauto" || echo "$with_convert" | grep -q 
"ext2"; then
-               PKG_CHECK_MODULES(EXT2FS, [ext2fs >= 1.42],,
-                       [PKG_CHECK_MODULES(EXT2FS, [ext2fs],
-                               [AC_DEFINE([HAVE_OLD_E2FSPROGS], [1],
-                                         [E2fsprogs does not support 
BIGALLOC])]
-                               )])
+               PKG_CHECK_MODULES(EXT2FS, [ext2fs])
                PKG_CHECK_MODULES(COM_ERR, [com_err])
                convertfs="${convertfs:+$convertfs,}ext2"
                BTRFSCONVERT_EXT2=1
diff --git a/convert/source-ext2.h b/convert/source-ext2.h
index 80833b2..c321412 100644
--- a/convert/source-ext2.h
+++ b/convert/source-ext2.h
@@ -33,8 +33,18 @@
  * BIGALLOC.
  * Unlike normal RO compat flag, BIGALLOC affects how e2fsprogs check used
  * space, and btrfs-convert heavily relies on it.
+ *
+ * e2fsprogs 1.42 also introduced the 64-bit API.  Any file system
+ * that requires it will have EXT4_FEATURE_INCOMPAT_64BIT set and
+ * will fail to open with earlier releases.  We can map it to the
+ * older API without risk of corruption.
  */
-#ifdef HAVE_OLD_E2FSPROGS
+#ifndef EXT2_FLAG_64BITS
+#define EXT2_FLAG_64BITS               (0)
+#define ext2fs_get_block_bitmap_range2 ext2fs_get_block_bitmap_range
+#define ext2fs_inode_data_blocks2 ext2fs_inode_data_blocks
+#define ext2fs_read_ext_attr2 ext2fs_read_ext_attr
+#define ext2fs_blocks_count(s)         ((s)->s_blocks_count)
 #define EXT2FS_CLUSTER_RATIO(fs)       (1)
 #define EXT2_CLUSTERS_PER_GROUP(s)     (EXT2_BLOCKS_PER_GROUP(s))
 #define EXT2FS_B2C(fs, blk)            (blk)
-- 
1.7.12.4

++++++ 0002-btrfs-progs-build-autoconf-2.63-compatibility.patch ++++++
>From ce3c33cd54a4de8a3c49c11806fae195328b4413 Mon Sep 17 00:00:00 2001
From: Jeff Mahoney <je...@suse.com>
Date: Fri, 27 Apr 2018 14:50:08 -0400
Subject: [PATCH 2/3] btrfs-progs: build: autoconf 2.63 compatibility
Patch-mainline: Submitted, linux-btrfs 30 Apr 2018

Commit 2e1932e6a38 (btrfs-progs: build: simplify version tracking)
started m4_chomp to strip the newlines from the version file.  m4_chomp
was introduced in autoconf 2.64 but SLE11 ships with autoconf 2.63.
For purposes of just stripping the newline, m4_flatten is sufficient.

Signed-off-by: Jeff Mahoney <je...@suse.com>
---
 configure.ac | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/configure.ac b/configure.ac
index 2dea1c6..9e5603b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
 AC_INIT([btrfs-progs],
-       m4_chomp(m4_include([VERSION])),
+       m4_flatten(m4_include([VERSION])),
        [linux-bt...@vger.kernel.org],,
        [http://btrfs.wiki.kernel.org])
 
-- 
1.7.12.4

++++++ 0003-btrfs-progs-build-detect-whether-std-gnu90-is-suppor.patch ++++++
>From 7b71ff68c7027a1fa9329ad9167625b81ea3aab2 Mon Sep 17 00:00:00 2001
From: Jeff Mahoney <je...@suse.com>
Date: Fri, 27 Apr 2018 14:47:28 -0400
Subject: [PATCH 3/3 v2] btrfs-progs: build: detect whether -std=gnu90 is
 supported
Patch-mainline: Submitted, linux-btrfs 30 Apr 2018

GCC releases prior to 4.5.0 don't support -std=gnu90 so btrfs-progs won't
build at all on older distros.  We can detect whether the compiler
supports -std=gnu90 and fall back to -std=gnu89 if it doesn't.

AX_CHECK_COMPILE_FLAG is the right way to do this, but it depends on
autoconf 2.64.  AX_GCC_VERSION has been deprecated, so we'll use that
only for earlier autoconf versions so we can drop it when we drop
support for older autoconf releases.

Signed-off-by: Jeff Mahoney <je...@suse.com>
---
 Makefile                    |  1 -
 Makefile.inc.in             |  1 +
 configure.ac                |  1 +
 m4/ax_check_compile_flag.m4 | 74 +++++++++++++++++++++++++++++++++++++++++++++
 m4/ax_gcc_version.m4        | 37 +++++++++++++++++++++++
 m4/btrfs_detect_cstd.m4     | 20 ++++++++++++
 6 files changed, 133 insertions(+), 1 deletion(-)
 create mode 100644 m4/ax_check_compile_flag.m4
 create mode 100644 m4/ax_gcc_version.m4
 create mode 100644 m4/btrfs_detect_cstd.m4

diff --git a/Makefile b/Makefile
index 5ba76d2..c0eb3d6 100644
--- a/Makefile
+++ b/Makefile
@@ -63,7 +63,6 @@ ABSTOPDIR = $(shell pwd)
 TOPDIR := .
 
 # Common build flags
-CSTD = -std=gnu90
 CFLAGS = $(SUBST_CFLAGS) \
         $(CSTD) \
         -include config.h \
diff --git a/Makefile.inc.in b/Makefile.inc.in
index 52410f6..fb32461 100644
--- a/Makefile.inc.in
+++ b/Makefile.inc.in
@@ -4,6 +4,7 @@
 export
 
 CC = @CC@
+CSTD = @BTRFS_CSTD_FLAGS@
 LN_S = @LN_S@
 AR = @AR@
 RM = @RM@
diff --git a/configure.ac b/configure.ac
index 9e5603b..4f63bb6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,6 +26,7 @@ AC_CONFIG_SRCDIR([btrfs.c])
 AC_PREFIX_DEFAULT([/usr/local])
 
 AC_PROG_CC
+BTRFS_DETECT_CSTD
 AC_CANONICAL_HOST
 AC_C_CONST
 AC_C_VOLATILE
diff --git a/m4/ax_check_compile_flag.m4 b/m4/ax_check_compile_flag.m4
new file mode 100644
index 0000000..dcabb92
--- /dev/null
+++ b/m4/ax_check_compile_flag.m4
@@ -0,0 +1,74 @@
+# ===========================================================================
+#  https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], 
[EXTRA-FLAGS], [INPUT])
+#
+# DESCRIPTION
+#
+#   Check whether the given FLAG works with the current language's compiler
+#   or gives an error.  (Warnings, however, are ignored)
+#
+#   ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
+#   success/failure.
+#
+#   If EXTRA-FLAGS is defined, it is added to the current language's default
+#   flags (e.g. CFLAGS) when the check is done.  The check is thus made with
+#   the flags: "CFLAGS EXTRA-FLAGS FLAG".  This can for example be used to
+#   force the compiler to issue an error when a bad flag is given.
+#
+#   INPUT gives an alternative input source to AC_COMPILE_IFELSE.
+#
+#   NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
+#   macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Guido U. Draheim <gui...@gmx.de>
+#   Copyright (c) 2011 Maarten Bosmans <mkbosm...@gmail.com>
+#
+#   This program is free software: you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation, either version 3 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 5
+
+AC_DEFUN([AX_CHECK_COMPILE_FLAG],
+[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF
+AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
+AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
+  ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
+  _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
+  AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
+    [AS_VAR_SET(CACHEVAR,[yes])],
+    [AS_VAR_SET(CACHEVAR,[no])])
+  _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
+AS_VAR_IF(CACHEVAR,yes,
+  [m4_default([$2], :)],
+  [m4_default([$3], :)])
+AS_VAR_POPDEF([CACHEVAR])dnl
+])dnl AX_CHECK_COMPILE_FLAGS
diff --git a/m4/ax_gcc_version.m4 b/m4/ax_gcc_version.m4
new file mode 100644
index 0000000..63914d5
--- /dev/null
+++ b/m4/ax_gcc_version.m4
@@ -0,0 +1,37 @@
+dnl @synopsis AX_GCC_VERSION(MAJOR, MINOR, PATCHLEVEL, [ACTION-SUCCESS], 
[ACTION-FAILURE])
+dnl @summary check wither gcc is at least version MAJOR.MINOR.PATCHLEVEL
+dnl @category InstalledPackages
+dnl
+dnl Check whether we are using gcc and, if so, whether its version
+dnl is at least MAJOR.MINOR.PATCHLEVEL
+dnl
+dnl ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
+dnl success/failure.
+dnl
+dnl @version 2005-05-30
+dnl @license GPLWithACException
+dnl @author Steven G. Johnson <stev...@alum.mit.edu> and Matteo Frigo.
+AC_DEFUN([AX_GCC_VERSION],
+[
+AC_REQUIRE([AC_PROG_CC])
+AC_CACHE_CHECK(whether we are using gcc $1.$2.$3 or later, ax_cv_gcc_$1_$2_$3,
+[
+ax_cv_gcc_$1_$2_$3=no
+if test "$GCC" = "yes"; then
+dnl The semicolon after "yes" below is to pacify NeXT's syntax-checking cpp.
+AC_EGREP_CPP(yes, [
+#ifdef __GNUC__
+#  if (__GNUC__ > $1) || (__GNUC__ == $1 && __GNUC_MINOR__ > $2) \
+   || (__GNUC__ == $1 && __GNUC_MINOR__ == $2 && __GNUC_PATCHLEVEL__ >= $3)
+     yes;
+#  endif
+#endif
+], [ax_cv_gcc_$1_$2_$3=yes])
+fi
+])
+if test "$ax_cv_gcc_$1_$2_$3" = yes; then
+       m4_default([$4], :)
+else
+       m4_default([$5], :)
+fi
+])
diff --git a/m4/btrfs_detect_cstd.m4 b/m4/btrfs_detect_cstd.m4
new file mode 100644
index 0000000..f0c45d9
--- /dev/null
+++ b/m4/btrfs_detect_cstd.m4
@@ -0,0 +1,20 @@
+dnl We prefer -std=gnu90 but gcc versions prior to 4.5.0 don't support
+dnl it.  AX_CHECK_COMPILE_FLAG is the right way to determine whether a
+dnl particular version of gcc supports a flag, but it requires autoconf
+dnl 2.64.  Since (for now) we still want to support older releases
+dnl that ship with autoconf 2.63, we the also-deprecated AX_GCC_VERSION
+dnl macro there.
+AC_DEFUN([BTRFS_DETECT_CSTD],
+[
+ m4_version_prereq([2.64], [
+     AX_CHECK_COMPILE_FLAG([-std=gnu90],
+       [BTRFS_CSTD_FLAGS=-std=gnu90],
+       [BTRFS_CSTD_FLAGS=-std=gnu89])
+   ], [
+     AX_GCC_VERSION([4], [5], [0],
+       [BTRFS_CSTD_FLAGS=-std=gnu90],
+       [BTRFS_CSTD_FLAGS=-std=gnu89])
+   ])
+   AC_SUBST([BTRFS_CSTD_FLAGS])
+]) dnl BTRFS_DETECT_CSTD
+
-- 
1.7.12.4

++++++ boot-btrfs.sh ++++++
--- /var/tmp/diff_new_pack.1M2JH5/_old  2018-05-06 14:57:53.308908919 +0200
+++ /var/tmp/diff_new_pack.1M2JH5/_new  2018-05-06 14:57:53.308908919 +0200
@@ -3,12 +3,9 @@
 #%depends: dm dmraid lvm2 udev md luks
 #%programs: btrfs
 #%programs: btrfs-convert
-#%programs: btrfs-debug-tree
-#%programs: btrfs-dump-super
 #%programs: btrfs-find-root
 #%programs: btrfs-image
 #%programs: btrfs-select-super
-#%programs: btrfs-zero-log
 #%programs: btrfsck
 #%programs: btrfstune
 # for fsck(8): listed twice so that a copy really ends up in /sbin

++++++ btrfs-progs-v4.16.tar.gz -> btrfs-progs-v4.16.1.tar.gz ++++++
++++ 1655 lines of diff (skipped)
++++    retrying with extended exclude list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/.gitignore new/btrfs-progs-v4.16.1/.gitignore
--- old/btrfs-progs-v4.16/.gitignore    2018-04-06 16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/.gitignore  2018-04-24 13:42:06.000000000 +0200
@@ -10,11 +10,9 @@
 Documentation/*.html
 btrfs
 btrfs.static
-btrfs-debug-tree
 btrfs-map-logical
 btrfs-fragments
 btrfsck
-calc-size
 ioctl-test
 dir-test
 send-test
@@ -28,11 +26,8 @@
 btrfs-find-root
 btrfs-find-root.static
 btrfs-image
-btrfs-show-super
-btrfs-zero-log
 btrfs-corrupt-block
 btrfs-select-super
-btrfs-calc-size
 btrfs-crc
 btrfstune
 mktables
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/CHANGES new/btrfs-progs-v4.16.1/CHANGES
--- old/btrfs-progs-v4.16/CHANGES       2018-04-06 16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/CHANGES     2018-04-24 13:42:06.000000000 +0200
@@ -1,3 +1,12 @@
+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:
Binary files old/btrfs-progs-v4.16/Documentation/btrfs-balance.8.gz and 
new/btrfs-progs-v4.16.1/Documentation/btrfs-balance.8.gz differ
Binary files old/btrfs-progs-v4.16/Documentation/btrfs-check.8.gz and 
new/btrfs-progs-v4.16.1/Documentation/btrfs-check.8.gz differ
Binary files old/btrfs-progs-v4.16/Documentation/btrfs-convert.8.gz and 
new/btrfs-progs-v4.16.1/Documentation/btrfs-convert.8.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/Documentation/btrfs-debug-tree.8.gz 
new/btrfs-progs-v4.16.1/Documentation/btrfs-debug-tree.8.gz
--- old/btrfs-progs-v4.16/Documentation/btrfs-debug-tree.8.gz   2018-05-06 
14:57:53.592898499 +0200
+++ new/btrfs-progs-v4.16.1/Documentation/btrfs-debug-tree.8.gz 1970-01-01 
01:00:00.000000000 +0100
@@ -1 +0,0 @@
-symbolic link to btrfs-inspect-internal.8.gz
Binary files old/btrfs-progs-v4.16/Documentation/btrfs-device.8.gz and 
new/btrfs-progs-v4.16.1/Documentation/btrfs-device.8.gz differ
Binary files old/btrfs-progs-v4.16/Documentation/btrfs-filesystem.8.gz and 
new/btrfs-progs-v4.16.1/Documentation/btrfs-filesystem.8.gz differ
Binary files old/btrfs-progs-v4.16/Documentation/btrfs-find-root.8.gz and 
new/btrfs-progs-v4.16.1/Documentation/btrfs-find-root.8.gz differ
Binary files old/btrfs-progs-v4.16/Documentation/btrfs-image.8.gz and 
new/btrfs-progs-v4.16.1/Documentation/btrfs-image.8.gz differ
Binary files old/btrfs-progs-v4.16/Documentation/btrfs-inspect-internal.8.gz 
and new/btrfs-progs-v4.16.1/Documentation/btrfs-inspect-internal.8.gz differ
Binary files old/btrfs-progs-v4.16/Documentation/btrfs-map-logical.8.gz and 
new/btrfs-progs-v4.16.1/Documentation/btrfs-map-logical.8.gz differ
Binary files old/btrfs-progs-v4.16/Documentation/btrfs-property.8.gz and 
new/btrfs-progs-v4.16.1/Documentation/btrfs-property.8.gz differ
Binary files old/btrfs-progs-v4.16/Documentation/btrfs-qgroup.8.gz and 
new/btrfs-progs-v4.16.1/Documentation/btrfs-qgroup.8.gz differ
Binary files old/btrfs-progs-v4.16/Documentation/btrfs-quota.8.gz and 
new/btrfs-progs-v4.16.1/Documentation/btrfs-quota.8.gz differ
Binary files old/btrfs-progs-v4.16/Documentation/btrfs-receive.8.gz and 
new/btrfs-progs-v4.16.1/Documentation/btrfs-receive.8.gz differ
Binary files old/btrfs-progs-v4.16/Documentation/btrfs-replace.8.gz and 
new/btrfs-progs-v4.16.1/Documentation/btrfs-replace.8.gz differ
Binary files old/btrfs-progs-v4.16/Documentation/btrfs-rescue.8.gz and 
new/btrfs-progs-v4.16.1/Documentation/btrfs-rescue.8.gz differ
Binary files old/btrfs-progs-v4.16/Documentation/btrfs-restore.8.gz and 
new/btrfs-progs-v4.16.1/Documentation/btrfs-restore.8.gz differ
Binary files old/btrfs-progs-v4.16/Documentation/btrfs-scrub.8.gz and 
new/btrfs-progs-v4.16.1/Documentation/btrfs-scrub.8.gz differ
Binary files old/btrfs-progs-v4.16/Documentation/btrfs-select-super.8.gz and 
new/btrfs-progs-v4.16.1/Documentation/btrfs-select-super.8.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/Documentation/btrfs-select-super.asciidoc 
new/btrfs-progs-v4.16.1/Documentation/btrfs-select-super.asciidoc
--- old/btrfs-progs-v4.16/Documentation/btrfs-select-super.asciidoc     
2018-04-06 16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/Documentation/btrfs-select-super.asciidoc   
2018-04-24 13:42:06.000000000 +0200
@@ -21,8 +21,7 @@
 NOTE: *Prior to overwriting the primary superblock, please make sure that the 
backup
 copies are valid!*
 
-To dump a superblock use the *btrfs inspect-internal
-dump-super* command, or the obsolete command *btrfs-show-super*.
+To dump a superblock use the *btrfs inspect-internal dump-super* command.
 
 Then run the check (in the non-repair mode) using the command *btrfs check -s*
 where '-s' specifies the superblock copy to use.
Binary files old/btrfs-progs-v4.16/Documentation/btrfs-send.8.gz and 
new/btrfs-progs-v4.16.1/Documentation/btrfs-send.8.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/Documentation/btrfs-show-super.8.gz 
new/btrfs-progs-v4.16.1/Documentation/btrfs-show-super.8.gz
--- old/btrfs-progs-v4.16/Documentation/btrfs-show-super.8.gz   2018-05-06 
14:57:53.604898059 +0200
+++ new/btrfs-progs-v4.16.1/Documentation/btrfs-show-super.8.gz 1970-01-01 
01:00:00.000000000 +0100
@@ -1 +0,0 @@
-symbolic link to btrfs-inspect-internal.8.gz
Binary files old/btrfs-progs-v4.16/Documentation/btrfs-subvolume.8.gz and 
new/btrfs-progs-v4.16.1/Documentation/btrfs-subvolume.8.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/Documentation/btrfs-zero-log.8.gz 
new/btrfs-progs-v4.16.1/Documentation/btrfs-zero-log.8.gz
--- old/btrfs-progs-v4.16/Documentation/btrfs-zero-log.8.gz     2018-05-06 
14:57:53.612897765 +0200
+++ new/btrfs-progs-v4.16.1/Documentation/btrfs-zero-log.8.gz   1970-01-01 
01:00:00.000000000 +0100
@@ -1 +0,0 @@
-symbolic link to btrfs-rescue.8.gz
Binary files old/btrfs-progs-v4.16/Documentation/btrfs.5.gz and 
new/btrfs-progs-v4.16.1/Documentation/btrfs.5.gz differ
Binary files old/btrfs-progs-v4.16/Documentation/btrfs.8.gz and 
new/btrfs-progs-v4.16.1/Documentation/btrfs.8.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/Documentation/btrfs.asciidoc 
new/btrfs-progs-v4.16.1/Documentation/btrfs.asciidoc
--- old/btrfs-progs-v4.16/Documentation/btrfs.asciidoc  2018-04-06 
16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/Documentation/btrfs.asciidoc        2018-04-24 
13:42:06.000000000 +0200
@@ -120,9 +120,11 @@
 
 Deprecated and obsolete tools:
 
-*btrfs-debug-tree*:: moved to *btrfs inspect-internal dump-tree*
-*btrfs-show-super*:: moved to *btrfs inspect-internal dump-super*
-*btrfs-zero-log*:: moved to *btrfs rescue zero-log*
+*btrfs-debug-tree*:: moved to *btrfs inspect-internal dump-tree*. Removed from
+source distribution.
+*btrfs-show-super*:: moved to *btrfs inspect-internal dump-super*, standalone
+removed.
+*btrfs-zero-log*:: moved to *btrfs rescue zero-log*, standalone removed.
 
 EXIT STATUS
 -----------
Binary files old/btrfs-progs-v4.16/Documentation/btrfstune.8.gz and 
new/btrfs-progs-v4.16.1/Documentation/btrfstune.8.gz differ
Binary files old/btrfs-progs-v4.16/Documentation/fsck.btrfs.8.gz and 
new/btrfs-progs-v4.16.1/Documentation/fsck.btrfs.8.gz differ
Binary files old/btrfs-progs-v4.16/Documentation/mkfs.btrfs.8.gz and 
new/btrfs-progs-v4.16.1/Documentation/mkfs.btrfs.8.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/Makefile new/btrfs-progs-v4.16.1/Makefile
--- old/btrfs-progs-v4.16/Makefile      2018-04-06 16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/Makefile    2018-04-24 13:42:06.000000000 +0200
@@ -210,13 +210,12 @@
 progs = $(progs_install) btrfsck btrfs-corrupt-block
 
 # install only selected
-progs_install = btrfs mkfs.btrfs btrfs-debug-tree \
-       btrfs-map-logical btrfs-image btrfs-zero-log \
+progs_install = btrfs mkfs.btrfs btrfs-map-logical btrfs-image \
        btrfs-find-root btrfstune \
        btrfs-select-super
 
 # other tools, not built by default
-progs_extra = btrfs-fragments btrfs-calc-size btrfs-show-super
+progs_extra = btrfs-fragments
 
 progs_static = $(foreach p,$(progs),$(p).static)
 
@@ -229,9 +228,6 @@
 btrfs_convert_cflags = -DBTRFSCONVERT_EXT2=$(BTRFSCONVERT_EXT2)
 btrfs_convert_cflags += -DBTRFSCONVERT_REISERFS=$(BTRFSCONVERT_REISERFS)
 btrfs_fragments_libs = -lgd -lpng -ljpeg -lfreetype
-btrfs_debug_tree_objects = cmds-inspect-dump-tree.o
-btrfs_show_super_objects = cmds-inspect-dump-super.o
-btrfs_calc_size_objects = cmds-inspect-tree-stats.o
 cmds_restore_cflags = -DBTRFSRESTORE_ZSTD=$(BTRFSRESTORE_ZSTD)
 
 CHECKER_FLAGS += $(btrfs_convert_cflags)
@@ -261,6 +257,7 @@
 static_objects = $(patsubst %.o, %.static.o, $(objects))
 static_cmds_objects = $(patsubst %.o, %.static.o, $(cmds_objects))
 static_libbtrfs_objects = $(patsubst %.o, %.static.o, $(libbtrfs_objects))
+static_libbtrfsutil_objects = $(patsubst %.o, %.static.o, 
$(libbtrfsutil_objects))
 static_convert_objects = $(patsubst %.o, %.static.o, $(convert_objects))
 static_mkfs_objects = $(patsubst %.o, %.static.o, $(mkfs_objects))
 static_image_objects = $(patsubst %.o, %.static.o, $(image_objects))
@@ -324,7 +321,7 @@
        $(Q)bash tests/fsck-tests.sh
 
 test-misc: btrfs btrfs-image btrfs-corrupt-block mkfs.btrfs btrfstune fssum \
-               btrfs-zero-log btrfs-find-root btrfs-select-super btrfs-convert
+               btrfs-find-root btrfs-select-super btrfs-convert
        @echo "    [TEST]   misc-tests.sh"
        $(Q)bash tests/misc-tests.sh
 
@@ -453,7 +450,7 @@
        @echo "    [LD]     $@"
        $(Q)$(CC) -o $@ $^ $(LDFLAGS) $(LIBS) $(LIBS_COMP)
 
-btrfs.static: btrfs.static.o $(static_objects) $(static_cmds_objects) 
$(static_libbtrfs_objects)
+btrfs.static: btrfs.static.o $(static_objects) $(static_cmds_objects) 
$(static_libbtrfs_objects) $(static_libbtrfsutil_objects)
        @echo "    [LD]     $@"
        $(Q)$(CC) -o $@ $^ $(STATIC_LDFLAGS) $(STATIC_LIBS) $(STATIC_LIBS_COMP)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/VERSION new/btrfs-progs-v4.16.1/VERSION
--- old/btrfs-progs-v4.16/VERSION       2018-04-06 16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/VERSION     2018-04-24 13:42:06.000000000 +0200
@@ -1 +1 @@
-v4.16
+v4.16.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/btrfs-calc-size.c 
new/btrfs-progs-v4.16.1/btrfs-calc-size.c
--- old/btrfs-progs-v4.16/btrfs-calc-size.c     2018-04-06 16:58:04.000000000 
+0200
+++ new/btrfs-progs-v4.16.1/btrfs-calc-size.c   1970-01-01 01:00:00.000000000 
+0100
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2011 Red Hat.  All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License v2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 021110-1307, USA.
- */
-
-#include "volumes.h"
-#include "utils.h"
-#include "commands.h"
-#include "help.h"
-
-int main(int argc, char **argv)
-{
-       int ret;
-
-       warning(
-"\nthe tool has been deprecated, please use 'btrfs inspect-internal 
tree-stats' instead\n");
-
-       if (argc > 1 && !strcmp(argv[1], "--help"))
-               usage(cmd_inspect_tree_stats_usage);
-
-       ret = cmd_inspect_tree_stats(argc, argv);
-
-       btrfs_close_all_devices();
-
-       return ret;
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/btrfs-corrupt-block.c 
new/btrfs-progs-v4.16.1/btrfs-corrupt-block.c
--- old/btrfs-progs-v4.16/btrfs-corrupt-block.c 2018-04-06 16:58:04.000000000 
+0200
+++ new/btrfs-progs-v4.16.1/btrfs-corrupt-block.c       2018-04-24 
13:42:06.000000000 +0200
@@ -726,7 +726,7 @@
 static void shift_items(struct btrfs_root *root, struct extent_buffer *eb)
 {
        int nritems = btrfs_header_nritems(eb);
-       int shift_space = btrfs_leaf_free_space(root, eb) / 2;
+       int shift_space = btrfs_leaf_free_space(root->fs_info, eb) / 2;
        int slot = nritems / 2;
        int i = 0;
        unsigned int data_end = btrfs_item_offset_nr(eb, nritems - 1);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/btrfs-debug-tree.c 
new/btrfs-progs-v4.16.1/btrfs-debug-tree.c
--- old/btrfs-progs-v4.16/btrfs-debug-tree.c    2018-04-06 16:58:04.000000000 
+0200
+++ new/btrfs-progs-v4.16.1/btrfs-debug-tree.c  1970-01-01 01:00:00.000000000 
+0100
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2007 Oracle.  All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License v2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 021110-1307, USA.
- */
-
-#include "disk-io.h"
-#include "volumes.h"
-#include "utils.h"
-#include "commands.h"
-#include "help.h"
-
-int main(int argc, char **argv)
-{
-       int ret;
-
-       set_argv0(argv);
-
-       if (argc > 1 && !strcmp(argv[1], "--help"))
-               usage(cmd_inspect_dump_tree_usage);
-
-       radix_tree_init();
-
-       ret = cmd_inspect_dump_tree(argc, argv);
-
-       btrfs_close_all_devices();
-
-       return ret;
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/btrfs-sb-mod.c new/btrfs-progs-v4.16.1/btrfs-sb-mod.c
--- old/btrfs-progs-v4.16/btrfs-sb-mod.c        2018-04-06 16:58:04.000000000 
+0200
+++ new/btrfs-progs-v4.16.1/btrfs-sb-mod.c      2018-04-24 13:42:06.000000000 
+0200
@@ -110,6 +110,7 @@
 enum field_type {
        TYPE_UNKNOWN,
        TYPE_U64,
+       TYPE_U16,
 };
 
 struct sb_field {
@@ -123,21 +124,43 @@
        { .name = "chunk_root_generation", .type = TYPE_U64 },
        { .name = "cache_generation", .type = TYPE_U64 },
        { .name = "uuid_tree_generation", .type = TYPE_U64 },
+       { .name = "compat_flags", .type = TYPE_U64 },
+       { .name = "compat_ro_flags", .type = TYPE_U64 },
+       { .name = "incompat_flags", .type = TYPE_U64 },
+       { .name = "csum_type", .type = TYPE_U16 },
 };
 
-#define MOD_FIELD(fname, set, val)                                     \
+#define MOD_FIELD_XX(fname, set, val, bits, f_dec, f_hex, f_type)      \
        else if (strcmp(name, #fname) == 0) {                           \
                if (set) {                                              \
-                       printf("SET: %s %llu (0x%llx)\n", #fname,       \
-                       (unsigned long long)*val, (unsigned long long)*val);    
\
-                       sb->fname = cpu_to_le64(*val);                  \
+                       printf("SET: "#fname" "f_dec" (0x"f_hex")\n", \
+                       (f_type)*val, (f_type)*val);                            
\
+                       sb->fname = cpu_to_le##bits(*val);                      
\
                } else {                                                        
\
-                       *val = le64_to_cpu(sb->fname);                  \
-                       printf("GET: %s %llu (0x%llx)\n", #fname,       \
-                       (unsigned long long)*val, (unsigned long long)*val);    
\
+                       *val = le##bits##_to_cpu(sb->fname);                    
\
+                       printf("GET: "#fname" "f_dec" (0x"f_hex")\n",   \
+                       (f_type)*val, (f_type)*val);                    \
                }                                                       \
        }
 
+#define MOD_FIELD64(fname, set, val)                                   \
+       MOD_FIELD_XX(fname, set, val, 64, "%llu", "%llx", unsigned long long)
+
+/* Alias for u64 */
+#define MOD_FIELD(fname, set, val)     MOD_FIELD64(fname, set, val)
+
+/*
+ * Support only GET and SET properly, ADD and SUB may work
+ */
+#define MOD_FIELD32(fname, set, val)                                   \
+       MOD_FIELD_XX(fname, set, val, 32, "%u", "%x", unsigned int)
+
+#define MOD_FIELD16(fname, set, val)                                   \
+       MOD_FIELD_XX(fname, set, val, 16, "%hu", "%hx", unsigned short int)
+
+#define MOD_FIELD8(fname, set, val)                                    \
+       MOD_FIELD_XX(fname, set, val, 8, "%hhu", "%hhx", unsigned char)
+
 static void mod_field_by_name(struct btrfs_super_block *sb, int set, const 
char *name,
                u64 *val)
 {
@@ -149,6 +172,10 @@
                MOD_FIELD(chunk_root_generation, set, val)
                MOD_FIELD(cache_generation, set, val)
                MOD_FIELD(uuid_tree_generation, set, val)
+               MOD_FIELD(compat_flags, set, val)
+               MOD_FIELD(compat_ro_flags, set, val)
+               MOD_FIELD(incompat_flags, set, val)
+               MOD_FIELD16(csum_type, set, val)
        else {
                printf("ERROR: unhandled field: %s\n", name);
                exit(1);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/btrfs-show-super.c 
new/btrfs-progs-v4.16.1/btrfs-show-super.c
--- old/btrfs-progs-v4.16/btrfs-show-super.c    2018-04-06 16:58:04.000000000 
+0200
+++ new/btrfs-progs-v4.16.1/btrfs-show-super.c  1970-01-01 01:00:00.000000000 
+0100
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2012 STRATO AG.  All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License v2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 021110-1307, USA.
- */
-
-#include "utils.h"
-#include "commands.h"
-#include "help.h"
-
-int main(int argc, char **argv)
-{
-
-       int ret;
-
-       set_argv0(argv);
-
-       warning(
-"\nthe tool has been deprecated, please use 'btrfs inspect-internal 
dump-super' instead\n");
-
-       if (argc > 1 && !strcmp(argv[1], "--help"))
-               usage(cmd_inspect_dump_super_usage);
-
-       ret = cmd_inspect_dump_super(argc, argv);
-
-       return ret;
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/btrfs-zero-log.c new/btrfs-progs-v4.16.1/btrfs-zero-log.c
--- old/btrfs-progs-v4.16/btrfs-zero-log.c      2018-04-06 16:58:04.000000000 
+0200
+++ new/btrfs-progs-v4.16.1/btrfs-zero-log.c    1970-01-01 01:00:00.000000000 
+0100
@@ -1,78 +0,0 @@
-/*
- * Copyright (C) 2007 Oracle.  All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License v2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 021110-1307, USA.
- */
-
-#include "kerncompat.h"
-
-#include <stdio.h>
-#include <unistd.h>
-#include "ctree.h"
-#include "disk-io.h"
-#include "transaction.h"
-#include "utils.h"
-#include "help.h"
-
-__attribute__((noreturn)) static void print_usage(void)
-{
-       printf("usage: btrfs-zero-log dev\n");
-       exit(1);
-}
-
-int main(int argc, char **argv)
-{
-       struct btrfs_root *root;
-       struct btrfs_trans_handle *trans;
-       struct btrfs_super_block *sb;
-       int ret;
-
-       set_argv0(argv);
-       if (check_argc_exact(argc - optind, 1))
-               print_usage();
-
-       radix_tree_init();
-
-       printf("WARNING: this utility is deprecated, please use 'btrfs rescue 
zero-log'\n\n");
-
-       if ((ret = check_mounted(argv[optind])) < 0) {
-               fprintf(stderr, "ERROR: could not check mount status: %s\n", 
strerror(-ret));
-               goto out;
-       } else if (ret) {
-               fprintf(stderr, "ERROR: %s is currently mounted\n", 
argv[optind]);
-               ret = -EBUSY;
-               goto out;
-       }
-
-       root = open_ctree(argv[optind], 0, OPEN_CTREE_WRITES | 
OPEN_CTREE_PARTIAL);
-       if (!root) {
-               fprintf(stderr, "ERROR: cannot open ctree\n");
-               return 1;
-       }
-
-       sb = root->fs_info->super_copy;
-       printf("Clearing log on %s, previous log_root %llu, level %u\n",
-                       argv[optind],
-                       (unsigned long long)btrfs_super_log_root(sb),
-                       (unsigned)btrfs_super_log_root_level(sb));
-       trans = btrfs_start_transaction(root, 1);
-       BUG_ON(IS_ERR(trans));
-       btrfs_set_super_log_root(root->fs_info->super_copy, 0);
-       btrfs_set_super_log_root_level(root->fs_info->super_copy, 0);
-       btrfs_commit_transaction(trans, root);
-       close_ctree(root);
-out:
-       return !!ret;
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/check/main.c new/btrfs-progs-v4.16.1/check/main.c
--- old/btrfs-progs-v4.16/check/main.c  2018-04-06 16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/check/main.c        2018-04-24 13:42:06.000000000 
+0200
@@ -5601,6 +5601,7 @@
        int ret;
        u64 data_len;
        unsigned long leaf_offset;
+       bool verify_csum = !!check_data_csum;
 
        root = root->fs_info->csum_root;
        if (!extent_buffer_uptodate(root->node)) {
@@ -5623,6 +5624,16 @@
                path.slots[0]--;
        ret = 0;
 
+       /*
+        * For metadata dump (btrfs-image) all data is wiped so verifying data
+        * csum is meaningless and will always report csum error.
+        */
+       if (check_data_csum && (btrfs_super_flags(root->fs_info->super_copy) &
+           (BTRFS_SUPER_FLAG_METADUMP | BTRFS_SUPER_FLAG_METADUMP_V2))) {
+               printf("skip data csum verification for metadata dump\n");
+               verify_csum = false;
+       }
+
        while (1) {
                if (path.slots[0] >= btrfs_header_nritems(path.nodes[0])) {
                        ret = btrfs_next_leaf(root, &path);
@@ -5644,7 +5655,7 @@
 
                data_len = (btrfs_item_size_nr(leaf, path.slots[0]) /
                              csum_size) * root->fs_info->sectorsize;
-               if (!check_data_csum)
+               if (!verify_csum)
                        goto skip_csum_check;
                leaf_offset = btrfs_item_ptr_offset(leaf, path.slots[0]);
                ret = check_extent_csums(root, key.offset, data_len,
@@ -5959,7 +5970,7 @@
                goto out;
 
        if (btrfs_is_leaf(buf)) {
-               btree_space_waste += btrfs_leaf_free_space(root, buf);
+               btree_space_waste += btrfs_leaf_free_space(fs_info, buf);
                for (i = 0; i < nritems; i++) {
                        struct btrfs_file_extent_item *fi;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/check/mode-lowmem.c 
new/btrfs-progs-v4.16.1/check/mode-lowmem.c
--- old/btrfs-progs-v4.16/check/mode-lowmem.c   2018-04-06 16:58:04.000000000 
+0200
+++ new/btrfs-progs-v4.16.1/check/mode-lowmem.c 2018-04-24 13:42:06.000000000 
+0200
@@ -390,7 +390,7 @@
                total_extent_tree_bytes += eb->len;
 
        if (level == 0) {
-               btree_space_waste += btrfs_leaf_free_space(root, eb);
+               btree_space_waste += btrfs_leaf_free_space(root->fs_info, eb);
        } else {
                free_nrs = (BTRFS_NODEPTRS_PER_BLOCK(root->fs_info) -
                            btrfs_header_nritems(eb));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/cmds-fi-du.c new/btrfs-progs-v4.16.1/cmds-fi-du.c
--- old/btrfs-progs-v4.16/cmds-fi-du.c  2018-04-06 16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/cmds-fi-du.c        2018-04-24 13:42:06.000000000 
+0200
@@ -449,7 +449,7 @@
        }
 
        pathtmp = pathp;
-       if (pathp == path)
+       if (pathp == path || *(pathp - 1) == '/')
                ret = sprintf(pathp, "%s", filename);
        else
                ret = sprintf(pathp, "/%s", filename);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/cmds-inspect-dump-tree.c 
new/btrfs-progs-v4.16.1/cmds-inspect-dump-tree.c
--- old/btrfs-progs-v4.16/cmds-inspect-dump-tree.c      2018-04-06 
16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/cmds-inspect-dump-tree.c    2018-04-24 
13:42:06.000000000 +0200
@@ -33,8 +33,9 @@
 #include "utils.h"
 #include "help.h"
 
-static void print_extents(struct btrfs_root *root, struct extent_buffer *eb)
+static void print_extents(struct extent_buffer *eb)
 {
+       struct btrfs_fs_info *fs_info = eb->fs_info;
        struct extent_buffer *next;
        int i;
        u32 nr;
@@ -43,13 +44,13 @@
                return;
 
        if (btrfs_is_leaf(eb)) {
-               btrfs_print_leaf(root, eb);
+               btrfs_print_leaf(eb);
                return;
        }
 
        nr = btrfs_header_nritems(eb);
        for (i = 0; i < nr; i++) {
-               next = read_tree_block(root->fs_info,
+               next = read_tree_block(fs_info,
                                btrfs_node_blockptr(eb, i),
                                btrfs_node_ptr_generation(eb, i));
                if (!extent_buffer_uptodate(next))
@@ -68,7 +69,7 @@
                                btrfs_header_level(eb));
                        goto out;
                }
-               print_extents(root, next);
+               print_extents(next);
                free_extent_buffer(next);
        }
 
@@ -220,12 +221,20 @@
        int uuid_tree_only = 0;
        int roots_only = 0;
        int root_backups = 0;
-       unsigned open_ctree_flags = OPEN_CTREE_FS_PARTIAL;
+       unsigned open_ctree_flags;
        u64 block_only = 0;
        struct btrfs_root *tree_root_scan;
        u64 tree_id = 0;
        bool follow = false;
 
+       /*
+        * For debug-tree, we care nothing about extent tree (it's just backref
+        * and usage accounting, only makes sense for RW operations).
+        * Use NO_BLOCK_GROUPS here could also speedup open_ctree() and allow us
+        * to inspect fs with corrupted extent tree blocks, and show as many 
good
+        * tree blocks as possible.
+        */
+       open_ctree_flags = OPEN_CTREE_PARTIAL | OPEN_CTREE_NO_BLOCK_GROUPS;
        while (1) {
                int c;
                enum { GETOPT_VAL_FOLLOW = 256 };
@@ -331,7 +340,7 @@
                                (unsigned long long)block_only);
                        goto close_root;
                }
-               btrfs_print_tree(root, leaf, follow);
+               btrfs_print_tree(leaf, follow);
                free_extent_buffer(leaf);
                goto close_root;
        }
@@ -358,20 +367,17 @@
                } else {
                        if (info->tree_root->node) {
                                printf("root tree\n");
-                               btrfs_print_tree(info->tree_root,
-                                                info->tree_root->node, 1);
+                               btrfs_print_tree(info->tree_root->node, 1);
                        }
 
                        if (info->chunk_root->node) {
                                printf("chunk tree\n");
-                               btrfs_print_tree(info->chunk_root,
-                                                info->chunk_root->node, 1);
+                               btrfs_print_tree(info->chunk_root->node, 1);
                        }
 
                        if (info->log_root_tree) {
                                printf("log root tree\n");
-                               btrfs_print_tree(info->log_root_tree,
-                                               info->log_root_tree->node, 1);
+                               btrfs_print_tree(info->log_root_tree->node, 1);
                        }
                }
        }
@@ -391,7 +397,7 @@
                        goto close_root;
                }
                printf("root tree\n");
-               btrfs_print_tree(info->tree_root, info->tree_root->node, 1);
+               btrfs_print_tree(info->tree_root->node, 1);
                goto close_root;
        }
 
@@ -401,7 +407,7 @@
                        goto close_root;
                }
                printf("chunk tree\n");
-               btrfs_print_tree(info->chunk_root, info->chunk_root->node, 1);
+               btrfs_print_tree(info->chunk_root->node, 1);
                goto close_root;
        }
 
@@ -411,8 +417,7 @@
                        goto close_root;
                }
                printf("log root tree\n");
-               btrfs_print_tree(info->log_root_tree, info->log_root_tree->node,
-                                1);
+               btrfs_print_tree(info->log_root_tree->node, 1);
                goto close_root;
        }
 
@@ -548,7 +553,7 @@
                                printf(" tree ");
                                btrfs_print_key(&disk_key);
                                printf("\n");
-                               print_extents(tree_root_scan, buf);
+                               print_extents(buf);
                        } else if (!skip) {
                                printf(" tree ");
                                btrfs_print_key(&disk_key);
@@ -558,7 +563,7 @@
                                               btrfs_header_level(buf));
                                } else {
                                        printf(" \n");
-                                       btrfs_print_tree(tree_root_scan, buf, 
1);
+                                       btrfs_print_tree(buf, 1);
                                }
                        }
                        free_extent_buffer(buf);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/cmds-restore.c new/btrfs-progs-v4.16.1/cmds-restore.c
--- old/btrfs-progs-v4.16/cmds-restore.c        2018-04-06 16:58:04.000000000 
+0200
+++ new/btrfs-progs-v4.16.1/cmds-restore.c      2018-04-24 13:42:06.000000000 
+0200
@@ -1281,8 +1281,15 @@
 
        for (i = super_mirror; i < BTRFS_SUPER_MIRROR_MAX; i++) {
                bytenr = btrfs_sb_offset(i);
+
+               /*
+                * Restore won't allocate extent and doesn't care anything
+                * in extent tree. Skip block group item search will allow
+                * restore to be executed on heavily damaged fs.
+                */
                fs_info = open_ctree_fs_info(dev, bytenr, root_location, 0,
-                                            OPEN_CTREE_PARTIAL);
+                                            OPEN_CTREE_PARTIAL |
+                                            OPEN_CTREE_NO_BLOCK_GROUPS);
                if (fs_info)
                        break;
                fprintf(stderr, "Could not open root, trying backup super\n");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/cmds-scrub.c new/btrfs-progs-v4.16.1/cmds-scrub.c
--- old/btrfs-progs-v4.16/cmds-scrub.c  2018-04-06 16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/cmds-scrub.c        2018-04-24 13:42:06.000000000 
+0200
@@ -591,8 +591,6 @@
                        ret = 0;
                        _SCRUB_KVREAD(ret, &i, data_extents_scrubbed, avail, l,
                                        &p[curr]->p);
-                       _SCRUB_KVREAD(ret, &i, data_extents_scrubbed, avail, l,
-                                       &p[curr]->p);
                        _SCRUB_KVREAD(ret, &i, tree_extents_scrubbed, avail, l,
                                        &p[curr]->p);
                        _SCRUB_KVREAD(ret, &i, data_bytes_scrubbed, avail, l,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/configure.ac new/btrfs-progs-v4.16.1/configure.ac
--- old/btrfs-progs-v4.16/configure.ac  2018-04-06 16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/configure.ac        2018-04-24 13:42:06.000000000 
+0200
@@ -93,7 +93,11 @@
 dnl detect tools to build documentation
 ASCIIDOC_TOOL="none"
 if test "x$enable_documentation" = xyes; then
-       AC_PATH_PROG([XMLTO], [xmlto], [xmlto])
+       AC_PATH_PROG([XMLTO], [xmlto])
+       if test -z "$XMLTO"; then
+               AC_MSG_ERROR([cannot find xmlto, cannot build documentation])
+       fi
+
        AC_PATH_PROG([GZIP], [gzip], [gzip])
        AC_PATH_PROG([MV], [mv], [mv])
        AC_PROG_SED
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/convert/common.c new/btrfs-progs-v4.16.1/convert/common.c
--- old/btrfs-progs-v4.16/convert/common.c      2018-04-06 16:58:04.000000000 
+0200
+++ new/btrfs-progs-v4.16.1/convert/common.c    2018-04-24 13:42:06.000000000 
+0200
@@ -116,7 +116,7 @@
 
        btrfs_set_super_bytenr(super, cfg->super_bytenr);
        btrfs_set_super_num_devices(super, 1);
-       btrfs_set_super_magic(super, BTRFS_MAGIC_PARTIAL);
+       btrfs_set_super_magic(super, BTRFS_MAGIC_TEMPORARY);
        btrfs_set_super_generation(super, 1);
        btrfs_set_super_root(super, root_bytenr);
        btrfs_set_super_chunk_root(super, chunk_bytenr);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/convert/main.c new/btrfs-progs-v4.16.1/convert/main.c
--- old/btrfs-progs-v4.16/convert/main.c        2018-04-06 16:58:04.000000000 
+0200
+++ new/btrfs-progs-v4.16.1/convert/main.c      2018-04-24 13:42:06.000000000 
+0200
@@ -1140,7 +1140,7 @@
        }
 
        root = open_ctree_fd(fd, devname, mkfs_cfg.super_bytenr,
-                            OPEN_CTREE_WRITES | OPEN_CTREE_FS_PARTIAL);
+                            OPEN_CTREE_WRITES | OPEN_CTREE_TEMPORARY_SUPER);
        if (!root) {
                error("unable to open ctree");
                goto fail;
@@ -1230,7 +1230,7 @@
        }
 
        root = open_ctree_fd(fd, devname, 0,
-                       OPEN_CTREE_WRITES | OPEN_CTREE_FS_PARTIAL);
+                            OPEN_CTREE_WRITES | OPEN_CTREE_TEMPORARY_SUPER);
        if (!root) {
                error("unable to open ctree for finalization");
                goto fail;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/convert/source-reiserfs.c 
new/btrfs-progs-v4.16.1/convert/source-reiserfs.c
--- old/btrfs-progs-v4.16/convert/source-reiserfs.c     2018-04-06 
16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/convert/source-reiserfs.c   2018-04-24 
13:42:06.000000000 +0200
@@ -350,8 +350,7 @@
        if (ret)
                return ret;
 
-       eb = alloc_extent_buffer(&root->fs_info->extent_cache, key.objectid,
-                                sectorsize);
+       eb = alloc_extent_buffer(root->fs_info, key.objectid, sectorsize);
 
        if (!eb)
                return -ENOMEM;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/ctree.c new/btrfs-progs-v4.16.1/ctree.c
--- old/btrfs-progs-v4.16/ctree.c       2018-04-06 16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/ctree.c     2018-04-24 13:42:06.000000000 +0200
@@ -480,11 +480,11 @@
                       (unsigned long long)btrfs_header_bytenr(buf));
                goto fail;
        }
-       if (btrfs_leaf_free_space(root, buf) < 0) {
+       if (btrfs_leaf_free_space(root->fs_info, buf) < 0) {
                ret = BTRFS_TREE_BLOCK_INVALID_FREE_SPACE;
                fprintf(stderr, "leaf free space incorrect %llu %d\n",
                        (unsigned long long)btrfs_header_bytenr(buf),
-                       btrfs_leaf_free_space(root, buf));
+                       btrfs_leaf_free_space(root->fs_info, buf));
                goto fail;
        }
 
@@ -1193,7 +1193,7 @@
                } else {
                        p->slots[level] = slot;
                        if (ins_len > 0 &&
-                           ins_len > btrfs_leaf_free_space(root, b)) {
+                           ins_len > btrfs_leaf_free_space(root->fs_info, b)) {
                                int sret = split_leaf(trans, root, key,
                                                      p, ins_len, ret == 0);
                                BUG_ON(sret > 0);
@@ -1634,16 +1634,17 @@
  * the start of the leaf data.  IOW, how much room
  * the leaf has left for both items and data
  */
-int btrfs_leaf_free_space(struct btrfs_root *root, struct extent_buffer *leaf)
+int btrfs_leaf_free_space(struct btrfs_fs_info *fs_info,
+                         struct extent_buffer *leaf)
 {
-       u32 nodesize = (root ? BTRFS_LEAF_DATA_SIZE(root->fs_info) : leaf->len);
        int nritems = btrfs_header_nritems(leaf);
        int ret;
-       ret = nodesize - leaf_space_used(leaf, 0, nritems);
+
+       ret = BTRFS_LEAF_DATA_SIZE(fs_info) - leaf_space_used(leaf, 0, nritems);
        if (ret < 0) {
-               printk("leaf free space ret %d, leaf data size %u, used %d 
nritems %d\n",
-                      ret, nodesize, leaf_space_used(leaf, 0, nritems),
-                      nritems);
+               printk("leaf free space ret %d, leaf data size %lu, used %d 
nritems %d\n",
+                      ret, BTRFS_LEAF_DATA_SIZE(fs_info),
+                      leaf_space_used(leaf, 0, nritems), nritems);
        }
        return ret;
 }
@@ -1691,7 +1692,7 @@
                        return PTR_ERR(right);
                return -EIO;
        }
-       free_space = btrfs_leaf_free_space(root, right);
+       free_space = btrfs_leaf_free_space(fs_info, right);
        if (free_space < data_size) {
                free_extent_buffer(right);
                return 1;
@@ -1704,7 +1705,7 @@
                free_extent_buffer(right);
                return 1;
        }
-       free_space = btrfs_leaf_free_space(root, right);
+       free_space = btrfs_leaf_free_space(fs_info, right);
        if (free_space < data_size) {
                free_extent_buffer(right);
                return 1;
@@ -1843,7 +1844,7 @@
        }
 
        left = read_node_slot(fs_info, path->nodes[1], slot - 1);
-       free_space = btrfs_leaf_free_space(root, left);
+       free_space = btrfs_leaf_free_space(fs_info, left);
        if (free_space < data_size) {
                free_extent_buffer(left);
                return 1;
@@ -1858,7 +1859,7 @@
                return 1;
        }
 
-       free_space = btrfs_leaf_free_space(root, left);
+       free_space = btrfs_leaf_free_space(fs_info, left);
        if (free_space < data_size) {
                free_extent_buffer(left);
                return 1;
@@ -2082,7 +2083,7 @@
                l = path->nodes[0];
 
                /* did the pushes work? */
-               if (btrfs_leaf_free_space(root, l) >= data_size)
+               if (btrfs_leaf_free_space(root->fs_info, l) >= data_size)
                        return 0;
        }
 
@@ -2239,7 +2240,8 @@
 
        leaf = path->nodes[0];
        btrfs_item_key_to_cpu(leaf, &orig_key, path->slots[0]);
-       if (btrfs_leaf_free_space(root, leaf) >= sizeof(struct btrfs_item))
+       if (btrfs_leaf_free_space(root->fs_info, leaf) >=
+           sizeof(struct btrfs_item))
                goto split;
 
        item_size = btrfs_item_size_nr(leaf, path->slots[0]);
@@ -2259,7 +2261,8 @@
        ret = split_leaf(trans, root, &orig_key, path, 0, 0);
        BUG_ON(ret);
 
-       BUG_ON(btrfs_leaf_free_space(root, leaf) < sizeof(struct btrfs_item));
+       BUG_ON(btrfs_leaf_free_space(root->fs_info, leaf) <
+              sizeof(struct btrfs_item));
        leaf = path->nodes[0];
 
 split:
@@ -2311,8 +2314,8 @@
        btrfs_mark_buffer_dirty(leaf);
 
        ret = 0;
-       if (btrfs_leaf_free_space(root, leaf) < 0) {
-               btrfs_print_leaf(root, leaf);
+       if (btrfs_leaf_free_space(root->fs_info, leaf) < 0) {
+               btrfs_print_leaf(leaf);
                BUG();
        }
        kfree(buf);
@@ -2407,8 +2410,8 @@
        btrfs_mark_buffer_dirty(leaf);
 
        ret = 0;
-       if (btrfs_leaf_free_space(root, leaf) < 0) {
-               btrfs_print_leaf(root, leaf);
+       if (btrfs_leaf_free_space(root->fs_info, leaf) < 0) {
+               btrfs_print_leaf(leaf);
                BUG();
        }
        return ret;
@@ -2432,8 +2435,8 @@
        nritems = btrfs_header_nritems(leaf);
        data_end = leaf_data_end(root->fs_info, leaf);
 
-       if (btrfs_leaf_free_space(root, leaf) < data_size) {
-               btrfs_print_leaf(root, leaf);
+       if (btrfs_leaf_free_space(root->fs_info, leaf) < data_size) {
+               btrfs_print_leaf(leaf);
                BUG();
        }
        slot = path->slots[0];
@@ -2441,7 +2444,7 @@
 
        BUG_ON(slot < 0);
        if (slot >= nritems) {
-               btrfs_print_leaf(root, leaf);
+               btrfs_print_leaf(leaf);
                printk("slot %d too large, nritems %d\n", slot, nritems);
                BUG_ON(1);
        }
@@ -2469,8 +2472,8 @@
        btrfs_mark_buffer_dirty(leaf);
 
        ret = 0;
-       if (btrfs_leaf_free_space(root, leaf) < 0) {
-               btrfs_print_leaf(root, leaf);
+       if (btrfs_leaf_free_space(root->fs_info, leaf) < 0) {
+               btrfs_print_leaf(leaf);
                BUG();
        }
        return ret;
@@ -2518,10 +2521,10 @@
        nritems = btrfs_header_nritems(leaf);
        data_end = leaf_data_end(root->fs_info, leaf);
 
-       if (btrfs_leaf_free_space(root, leaf) < total_size) {
-               btrfs_print_leaf(root, leaf);
+       if (btrfs_leaf_free_space(root->fs_info, leaf) < total_size) {
+               btrfs_print_leaf(leaf);
                printk("not enough freespace need %u have %d\n",
-                      total_size, btrfs_leaf_free_space(root, leaf));
+                      total_size, btrfs_leaf_free_space(root->fs_info, leaf));
                BUG();
        }
 
@@ -2532,7 +2535,7 @@
                unsigned int old_data = btrfs_item_end_nr(leaf, slot);
 
                if (old_data < data_end) {
-                       btrfs_print_leaf(root, leaf);
+                       btrfs_print_leaf(leaf);
                        printk("slot %d old_data %d data_end %d\n",
                               slot, old_data, data_end);
                        BUG_ON(1);
@@ -2579,8 +2582,8 @@
                btrfs_fixup_low_keys(root, path, &disk_key, 1);
        }
 
-       if (btrfs_leaf_free_space(root, leaf) < 0) {
-               btrfs_print_leaf(root, leaf);
+       if (btrfs_leaf_free_space(root->fs_info, leaf) < 0) {
+               btrfs_print_leaf(leaf);
                BUG();
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/ctree.h new/btrfs-progs-v4.16.1/ctree.h
--- old/btrfs-progs-v4.16/ctree.h       2018-04-06 16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/ctree.h     2018-04-24 13:42:06.000000000 +0200
@@ -45,10 +45,12 @@
 #define BTRFS_MAGIC 0x4D5F53665248425FULL /* ascii _BHRfS_M, no null */
 
 /*
- * Fake signature for an unfinalized filesystem, structures might be partially
- * created or missing.
+ * Fake signature for an unfinalized filesystem, which only has barebone tree
+ * structures (normally 6 near empty trees, on SINGLE meta/sys temporary 
chunks)
+ *
+ * ascii !BHRfS_M, no null
  */
-#define BTRFS_MAGIC_PARTIAL 0x4D5F536652484221ULL /* ascii !BHRfS_M, no null */
+#define BTRFS_MAGIC_TEMPORARY 0x4D5F536652484221ULL
 
 #define BTRFS_MAX_MIRRORS 3
 
@@ -2662,7 +2664,8 @@
 }
 
 int btrfs_prev_leaf(struct btrfs_root *root, struct btrfs_path *path);
-int btrfs_leaf_free_space(struct btrfs_root *root, struct extent_buffer *leaf);
+int btrfs_leaf_free_space(struct btrfs_fs_info *fs_info,
+                         struct extent_buffer *leaf);
 void btrfs_fixup_low_keys(struct btrfs_root *root, struct btrfs_path *path,
                          struct btrfs_disk_key *key, int level);
 int btrfs_set_item_key_safe(struct btrfs_root *root, struct btrfs_path *path,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/disk-io.c new/btrfs-progs-v4.16.1/disk-io.c
--- old/btrfs-progs-v4.16/disk-io.c     2018-04-06 16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/disk-io.c   2018-04-24 13:42:06.000000000 +0200
@@ -184,8 +184,7 @@
 struct extent_buffer* btrfs_find_create_tree_block(
                struct btrfs_fs_info *fs_info, u64 bytenr)
 {
-       return alloc_extent_buffer(&fs_info->extent_cache, bytenr,
-                       fs_info->nodesize);
+       return alloc_extent_buffer(fs_info, bytenr, fs_info->nodesize);
 }
 
 void readahead_tree_block(struct btrfs_fs_info *fs_info, u64 bytenr,
@@ -1117,14 +1116,14 @@
                fs_info->ignore_chunk_tree_error = 1;
 
        if ((flags & OPEN_CTREE_RECOVER_SUPER)
-            && (flags & OPEN_CTREE_FS_PARTIAL)) {
+            && (flags & OPEN_CTREE_TEMPORARY_SUPER)) {
                fprintf(stderr,
-                   "cannot open a partially created filesystem for recovery");
+       "cannot open a filesystem with temporary super block for recovery");
                goto out;
        }
 
-       if (flags & OPEN_CTREE_FS_PARTIAL)
-               sbflags = SBREAD_PARTIAL;
+       if (flags & OPEN_CTREE_TEMPORARY_SUPER)
+               sbflags = SBREAD_TEMPORARY;
 
        ret = btrfs_scan_fs_devices(fp, path, &fs_devices, sb_bytenr, sbflags,
                        (flags & OPEN_CTREE_NO_DEVICES));
@@ -1285,8 +1284,8 @@
        int csum_size;
 
        if (btrfs_super_magic(sb) != BTRFS_MAGIC) {
-               if (btrfs_super_magic(sb) == BTRFS_MAGIC_PARTIAL) {
-                       if (!(sbflags & SBREAD_PARTIAL)) {
+               if (btrfs_super_magic(sb) == BTRFS_MAGIC_TEMPORARY) {
+                       if (!(sbflags & SBREAD_TEMPORARY)) {
                                error("superblock magic doesn't match");
                                return -EIO;
                        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/disk-io.h new/btrfs-progs-v4.16.1/disk-io.h
--- old/btrfs-progs-v4.16/disk-io.h     2018-04-06 16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/disk-io.h   2018-04-24 13:42:06.000000000 +0200
@@ -73,8 +73,12 @@
         */
        OPEN_CTREE_IGNORE_CHUNK_TREE_ERROR = (1U << 11),
 
-       /* Allow to open a partially created filesystem */
-       OPEN_CTREE_FS_PARTIAL = (1U << 12),
+       /*
+        * Allow to open fs with temporary superblock (BTRFS_MAGIC_PARTIAL),
+        * such fs contains very basic tree layout, just able to be opened.
+        * Such temporary super is used for mkfs or convert.
+        */
+       OPEN_CTREE_TEMPORARY_SUPER = (1U << 12),
 
        /*
         * Invalidate the free space tree (i.e., clear the FREE_SPACE_TREE_VALID
@@ -95,7 +99,7 @@
         * Read superblock with the fake signature, cannot be used with
         * SBREAD_RECOVER
         */
-       SBREAD_PARTIAL          = (1 << 1),
+       SBREAD_TEMPORARY = (1 << 1),
 };
 
 /*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/extent-tree.c new/btrfs-progs-v4.16.1/extent-tree.c
--- old/btrfs-progs-v4.16/extent-tree.c 2018-04-06 16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/extent-tree.c       2018-04-24 13:42:06.000000000 
+0200
@@ -1070,7 +1070,7 @@
                printf("Size is %u, needs to be %u, slot %d\n",
                       (unsigned)item_size,
                       (unsigned)sizeof(*ei), path->slots[0]);
-               btrfs_print_leaf(root, leaf);
+               btrfs_print_leaf(leaf);
                return -EINVAL;
        }
        BUG_ON(item_size < sizeof(*ei));
@@ -1587,7 +1587,7 @@
        }
 
        if (ret != 0) {
-               btrfs_print_leaf(root, path->nodes[0]);
+               btrfs_print_leaf(path->nodes[0]);
                printk("failed to find block number %Lu\n",
                        (unsigned long long)bytenr);
                BUG();
@@ -2273,7 +2273,7 @@
                                printk(KERN_ERR "umm, got %d back from search"
                                       ", was looking for %llu\n", ret,
                                       (unsigned long long)bytenr);
-                               btrfs_print_leaf(extent_root, path->nodes[0]);
+                               btrfs_print_leaf(path->nodes[0]);
                        }
                        BUG_ON(ret);
                        extent_slot = path->slots[0];
@@ -2311,7 +2311,7 @@
                        printk(KERN_ERR "umm, got %d back from search"
                               ", was looking for %llu\n", ret,
                               (unsigned long long)bytenr);
-                       btrfs_print_leaf(extent_root, path->nodes[0]);
+                       btrfs_print_leaf(path->nodes[0]);
                }
                BUG_ON(ret);
                extent_slot = path->slots[0];
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/extent_io.c new/btrfs-progs-v4.16.1/extent_io.c
--- old/btrfs-progs-v4.16/extent_io.c   2018-04-06 16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/extent_io.c 2018-04-24 13:42:06.000000000 +0200
@@ -545,7 +545,7 @@
        return ret;
 }
 
-static struct extent_buffer *__alloc_extent_buffer(struct extent_io_tree *tree,
+static struct extent_buffer *__alloc_extent_buffer(struct btrfs_fs_info *info,
                                                   u64 bytenr, u32 blocksize)
 {
        struct extent_buffer *eb;
@@ -558,12 +558,14 @@
        eb->len = blocksize;
        eb->refs = 1;
        eb->flags = 0;
-       eb->tree = tree;
        eb->fd = -1;
        eb->dev_bytenr = (u64)-1;
        eb->cache_node.start = bytenr;
        eb->cache_node.size = blocksize;
+       eb->fs_info = info;
+       eb->tree = &info->extent_cache;
        INIT_LIST_HEAD(&eb->recow);
+       INIT_LIST_HEAD(&eb->lru);
 
        return eb;
 }
@@ -572,9 +574,11 @@
 {
        struct extent_buffer *new;
 
-       new = __alloc_extent_buffer(NULL, src->start, src->len);
+       new = __alloc_extent_buffer(src->fs_info, src->start, src->len);
        if (!new)
                return NULL;
+       /* cloned eb is not linked into fs_info->extent_cache */
+       new->tree = NULL;
 
        copy_extent_buffer(new, src, 0, 0, src->len);
        new->flags |= EXTENT_BUFFER_DUMMY;
@@ -587,7 +591,7 @@
        struct extent_io_tree *tree = eb->tree;
 
        BUG_ON(eb->refs);
-       BUG_ON(tree->cache_size < eb->len);
+       BUG_ON(tree && tree->cache_size < eb->len);
        list_del_init(&eb->lru);
        if (!(eb->flags & EXTENT_BUFFER_DUMMY)) {
                remove_cache_extent(&tree->cache, &eb->cache_node);
@@ -664,10 +668,11 @@
        }
 }
 
-struct extent_buffer *alloc_extent_buffer(struct extent_io_tree *tree,
+struct extent_buffer *alloc_extent_buffer(struct btrfs_fs_info *fs_info,
                                          u64 bytenr, u32 blocksize)
 {
        struct extent_buffer *eb;
+       struct extent_io_tree *tree = &fs_info->extent_cache;
        struct cache_extent *cache;
 
        cache = lookup_cache_extent(&tree->cache, bytenr, blocksize);
@@ -684,7 +689,7 @@
                                          cache_node);
                        free_extent_buffer(eb);
                }
-               eb = __alloc_extent_buffer(tree, bytenr, blocksize);
+               eb = __alloc_extent_buffer(fs_info, bytenr, blocksize);
                if (!eb)
                        return NULL;
                ret = insert_cache_extent(&tree->cache, &eb->cache_node);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/extent_io.h new/btrfs-progs-v4.16.1/extent_io.h
--- old/btrfs-progs-v4.16/extent_io.h   2018-04-06 16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/extent_io.h 2018-04-24 13:42:06.000000000 +0200
@@ -91,13 +91,14 @@
        struct cache_extent cache_node;
        u64 start;
        u64 dev_bytenr;
-       u32 len;
        struct extent_io_tree *tree;
        struct list_head lru;
        struct list_head recow;
+       u32 len;
        int refs;
        u32 flags;
        int fd;
+       struct btrfs_fs_info *fs_info;
        char data[] __attribute__((aligned(8)));
 };
 
@@ -145,7 +146,7 @@
                                         u64 bytenr, u32 blocksize);
 struct extent_buffer *find_first_extent_buffer(struct extent_io_tree *tree,
                                               u64 start);
-struct extent_buffer *alloc_extent_buffer(struct extent_io_tree *tree,
+struct extent_buffer *alloc_extent_buffer(struct btrfs_fs_info *fs_info,
                                          u64 bytenr, u32 blocksize);
 struct extent_buffer *btrfs_clone_extent_buffer(struct extent_buffer *src);
 void free_extent_buffer(struct extent_buffer *eb);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/mkfs/common.c new/btrfs-progs-v4.16.1/mkfs/common.c
--- old/btrfs-progs-v4.16/mkfs/common.c 2018-04-06 16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/mkfs/common.c       2018-04-24 13:42:06.000000000 
+0200
@@ -189,7 +189,7 @@
 
        btrfs_set_super_bytenr(&super, cfg->blocks[MKFS_SUPER_BLOCK]);
        btrfs_set_super_num_devices(&super, 1);
-       btrfs_set_super_magic(&super, BTRFS_MAGIC_PARTIAL);
+       btrfs_set_super_magic(&super, BTRFS_MAGIC_TEMPORARY);
        btrfs_set_super_generation(&super, 1);
        btrfs_set_super_root(&super, cfg->blocks[MKFS_ROOT_TREE]);
        btrfs_set_super_chunk_root(&super, cfg->blocks[MKFS_CHUNK_TREE]);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/mkfs/main.c new/btrfs-progs-v4.16.1/mkfs/main.c
--- old/btrfs-progs-v4.16/mkfs/main.c   2018-04-06 16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/mkfs/main.c 2018-04-24 13:42:06.000000000 +0200
@@ -1099,7 +1099,7 @@
        }
 
        fs_info = open_ctree_fs_info(file, 0, 0, 0,
-                       OPEN_CTREE_WRITES | OPEN_CTREE_FS_PARTIAL);
+                       OPEN_CTREE_WRITES | OPEN_CTREE_TEMPORARY_SUPER);
        if (!fs_info) {
                error("open ctree failed");
                goto error;
@@ -1295,6 +1295,12 @@
                }
        }
 
+       if (!ret && close_ret) {
+               ret = close_ret;
+               error("failed to close ctree, the filesystem may be 
inconsistent: %d",
+                     ret);
+       }
+
        btrfs_close_all_devices();
        free(label);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/print-tree.c new/btrfs-progs-v4.16.1/print-tree.c
--- old/btrfs-progs-v4.16/print-tree.c  2018-04-06 16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/print-tree.c        2018-04-24 13:42:06.000000000 
+0200
@@ -1173,8 +1173,9 @@
        }
 }
 
-void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *eb)
+void btrfs_print_leaf(struct extent_buffer *eb)
 {
+       struct btrfs_fs_info *fs_info = eb->fs_info;
        struct btrfs_item *item;
        struct btrfs_disk_key disk_key;
        char flags_str[128];
@@ -1190,7 +1191,7 @@
 
        printf("leaf %llu items %d free space %d generation %llu owner ",
                (unsigned long long)btrfs_header_bytenr(eb), nr,
-               btrfs_leaf_free_space(root, eb),
+               btrfs_leaf_free_space(fs_info, eb),
                (unsigned long long)btrfs_header_generation(eb));
        print_objectid(stdout, btrfs_header_owner(eb), 0);
        printf("\n");
@@ -1290,7 +1291,7 @@
                        printf("\t\tcsum item\n");
                        break;
                case BTRFS_EXTENT_CSUM_KEY:
-                       print_extent_csum(eb, root->fs_info, item_size,
+                       print_extent_csum(eb, fs_info, item_size,
                                        offset);
                        break;
                case BTRFS_EXTENT_DATA_KEY:
@@ -1351,10 +1352,11 @@
        }
 }
 
-void btrfs_print_tree(struct btrfs_root *root, struct extent_buffer *eb, int 
follow)
+void btrfs_print_tree(struct extent_buffer *eb, int follow)
 {
        u32 i;
        u32 nr;
+       struct btrfs_fs_info *fs_info = eb->fs_info;
        struct btrfs_disk_key disk_key;
        struct btrfs_key key;
        struct extent_buffer *next;
@@ -1363,13 +1365,13 @@
                return;
        nr = btrfs_header_nritems(eb);
        if (btrfs_is_leaf(eb)) {
-               btrfs_print_leaf(root, eb);
+               btrfs_print_leaf(eb);
                return;
        }
        printf("node %llu level %d items %d free %u generation %llu owner ",
               (unsigned long long)eb->start,
                btrfs_header_level(eb), nr,
-               (u32)BTRFS_NODEPTRS_PER_BLOCK(root->fs_info) - nr,
+               (u32)BTRFS_NODEPTRS_PER_BLOCK(fs_info) - nr,
                (unsigned long long)btrfs_header_generation(eb));
        print_objectid(stdout, btrfs_header_owner(eb), 0);
        printf("\n");
@@ -1383,7 +1385,7 @@
                btrfs_print_key(&disk_key);
                printf(" block %llu (%llu) gen %llu\n",
                       (unsigned long long)blocknr,
-                      (unsigned long long)blocknr / root->fs_info->nodesize,
+                      (unsigned long long)blocknr / fs_info->nodesize,
                       (unsigned long long)btrfs_node_ptr_generation(eb, i));
                fflush(stdout);
        }
@@ -1391,7 +1393,7 @@
                return;
 
        for (i = 0; i < nr; i++) {
-               next = read_tree_block(root->fs_info,
+               next = read_tree_block(fs_info,
                                btrfs_node_blockptr(eb, i),
                                btrfs_node_ptr_generation(eb, i));
                if (!extent_buffer_uptodate(next)) {
@@ -1411,7 +1413,7 @@
                        free_extent_buffer(next);
                        continue;
                }
-               btrfs_print_tree(root, next, 1);
+               btrfs_print_tree(next, 1);
                free_extent_buffer(next);
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/print-tree.h new/btrfs-progs-v4.16.1/print-tree.h
--- old/btrfs-progs-v4.16/print-tree.h  2018-04-06 16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/print-tree.h        2018-04-24 13:42:06.000000000 
+0200
@@ -19,8 +19,8 @@
 #ifndef __PRINT_TREE_H__
 #define __PRINT_TREE_H__
 
-void btrfs_print_leaf(struct btrfs_root *root, struct extent_buffer *l);
-void btrfs_print_tree(struct btrfs_root *root, struct extent_buffer *t, int 
follow);
+void btrfs_print_leaf(struct extent_buffer *l);
+void btrfs_print_tree(struct extent_buffer *t, int follow);
 void btrfs_print_key(struct btrfs_disk_key *disk_key);
 void print_chunk_item(struct extent_buffer *eb, struct btrfs_chunk *chunk);
 void print_extent_item(struct extent_buffer *eb, int slot, int metadata);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/send-utils.c new/btrfs-progs-v4.16.1/send-utils.c
--- old/btrfs-progs-v4.16/send-utils.c  2018-04-06 16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/send-utils.c        2018-04-24 13:42:06.000000000 
+0200
@@ -757,18 +757,6 @@
        return 0;
 }
 
-__attribute__((deprecated))
-char *path_cat(const char *p1, const char *p2)
-{
-       int p1_len = strlen(p1);
-       int p2_len = strlen(p2);
-       char *new = malloc(p1_len + p2_len + 2);
-
-       path_cat_out(new, p1, p2);
-
-       return new;
-}
-
 int path_cat3_out(char *out, const char *p1, const char *p2, const char *p3)
 {
        int p1_len = strlen(p1);
@@ -788,16 +776,3 @@
 
        return 0;
 }
-
-__attribute__((deprecated))
-char *path_cat3(const char *p1, const char *p2, const char *p3)
-{
-       int p1_len = strlen(p1);
-       int p2_len = strlen(p2);
-       int p3_len = strlen(p3);
-       char *new = malloc(p1_len + p2_len + p3_len + 3);
-
-       path_cat3_out(new, p1, p2, p3);
-
-       return new;
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/send-utils.h new/btrfs-progs-v4.16.1/send-utils.h
--- old/btrfs-progs-v4.16/send-utils.h  2018-04-06 16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/send-utils.h        2018-04-24 13:42:06.000000000 
+0200
@@ -104,15 +104,6 @@
 
 int btrfs_subvolid_resolve(int fd, char *path, size_t path_len, u64 subvol_id);
 
-/*
- * DEPRECATED: the functions path_cat and path_cat3 are unsafe and should not
- * be used, use the _out variants and always check the return code.
- */
-__attribute__((deprecated))
-char *path_cat(const char *p1, const char *p2);
-__attribute__((deprecated))
-char *path_cat3(const char *p1, const char *p2, const char *p3);
-
 int path_cat_out(char *out, const char *p1, const char *p2);
 int path_cat3_out(char *out, const char *p1, const char *p2, const char *p3);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/show-blocks new/btrfs-progs-v4.16.1/show-blocks
--- old/btrfs-progs-v4.16/show-blocks   2018-04-06 16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/show-blocks 2018-04-24 13:42:06.000000000 +0200
@@ -108,7 +108,7 @@
     return X
 
 def run_debug_tree(device):
-    p = os.popen('btrfs-debug-tree -e ' + device)
+    p = os.popen('btrfs inspect-internal dump-tree -e ' + device)
     data = loaddata(p)
     return data
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/tests/fsck-tests/031-metadatadump-check-data-csum/test.sh 
new/btrfs-progs-v4.16.1/tests/fsck-tests/031-metadatadump-check-data-csum/test.sh
--- 
old/btrfs-progs-v4.16/tests/fsck-tests/031-metadatadump-check-data-csum/test.sh 
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/btrfs-progs-v4.16.1/tests/fsck-tests/031-metadatadump-check-data-csum/test.sh
   2018-04-24 13:42:06.000000000 +0200
@@ -0,0 +1,30 @@
+#!/bin/bash
+# To check if "btrfs check" can detect metadata dump (restored by btrfs-iamge)
+# and ignore --check-data-csum option
+
+source "$TEST_TOP/common"
+
+check_prereq btrfs
+check_prereq mkfs.btrfs
+check_prereq btrfs-image
+setup_root_helper
+prepare_test_dev
+
+run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f "$TEST_DEV"
+run_check_mount_test_dev
+
+run_check $SUDO_HELPER dd if=/dev/urandom of="$TEST_MNT/file" bs=4k count=16
+run_check_umount_test_dev
+
+run_check $SUDO_HELPER "$TOP/btrfs-image" "$TEST_DEV" "restored_image"
+
+# use prepare_test_dev() to wipe all existing data on $TEST_DEV
+# so there is no way that restored image could have mathcing data csum
+prepare_test_dev
+
+run_check $SUDO_HELPER "$TOP/btrfs-image" -r "restored_image" "$TEST_DEV"
+
+# Should not report any error
+run_check "$TOP/btrfs" check --check-data-csum "$TEST_DEV"
+
+rm -rf -- "restored_image*"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/tests/misc-tests/003-zero-log/test.sh 
new/btrfs-progs-v4.16.1/tests/misc-tests/003-zero-log/test.sh
--- old/btrfs-progs-v4.16/tests/misc-tests/003-zero-log/test.sh 2018-04-06 
16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/tests/misc-tests/003-zero-log/test.sh       
2018-04-24 13:42:06.000000000 +0200
@@ -24,11 +24,7 @@
                --rootdir "$INTERNAL_BIN/Documentation" \
                "$TEST_DEV"
        run_check "$TOP/btrfs" inspect-internal dump-super "$TEST_DEV"
-       if [ "$1" = 'standalone' ]; then
-               run_check "$TOP/btrfs" rescue zero-log "$TEST_DEV"
-       else
-               run_check "$TOP/btrfs-zero-log" "$TEST_DEV"
-       fi
+       run_check "$TOP/btrfs" rescue zero-log "$TEST_DEV"
        log_root=$(get_log_root "$TEST_DEV")
        log_root_level=$(get_log_root "$TEST_DEV")
        if [ "$log_root" != 0 ]; then
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/tests/misc-tests.sh 
new/btrfs-progs-v4.16.1/tests/misc-tests.sh
--- old/btrfs-progs-v4.16/tests/misc-tests.sh   2018-04-06 16:58:04.000000000 
+0200
+++ new/btrfs-progs-v4.16.1/tests/misc-tests.sh 2018-04-24 13:42:06.000000000 
+0200
@@ -46,7 +46,6 @@
 check_prereq btrfs-image
 check_prereq btrfstune
 check_prereq btrfs
-check_prereq btrfs-zero-log
 check_prereq btrfs-find-root
 check_prereq btrfs-select-super
 check_kernel_support
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/utils.c new/btrfs-progs-v4.16.1/utils.c
--- old/btrfs-progs-v4.16/utils.c       2018-04-06 16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/utils.c     2018-04-24 13:42:06.000000000 +0200
@@ -1050,7 +1050,7 @@
         * structures.
         */
        if (btrfs_super_magic(disk_super) != BTRFS_MAGIC &&
-                       btrfs_super_magic(disk_super) != BTRFS_MAGIC_PARTIAL)
+                       btrfs_super_magic(disk_super) != BTRFS_MAGIC_TEMPORARY)
                goto brelse;
 
        if (!memcmp(disk_super->fsid, root->fs_info->super_copy->fsid,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/btrfs-progs-v4.16/volumes.c new/btrfs-progs-v4.16.1/volumes.c
--- old/btrfs-progs-v4.16/volumes.c     2018-04-06 16:58:04.000000000 +0200
+++ new/btrfs-progs-v4.16.1/volumes.c   2018-04-24 13:42:06.000000000 +0200
@@ -120,14 +120,22 @@
 
 static LIST_HEAD(fs_uuids);
 
-static struct btrfs_device *__find_device(struct list_head *head, u64 devid,
-                                         u8 *uuid)
+/*
+ * Find a device specified by @devid or @uuid in the list of @fs_devices, or
+ * return NULL.
+ *
+ * If devid and uuid are both specified, the match must be exact, otherwise
+ * only devid is used.
+ */
+static struct btrfs_device *find_device(struct btrfs_fs_devices *fs_devices,
+               u64 devid, u8 *uuid)
 {
+       struct list_head *head = &fs_devices->devices;
        struct btrfs_device *dev;
 
        list_for_each_entry(dev, head, dev_list) {
                if (dev->devid == devid &&
-                   !memcmp(dev->uuid, uuid, BTRFS_UUID_SIZE)) {
+                   (!uuid || !memcmp(dev->uuid, uuid, BTRFS_UUID_SIZE))) {
                        return dev;
                }
        }
@@ -166,7 +174,7 @@
                fs_devices->lowest_devid = (u64)-1;
                device = NULL;
        } else {
-               device = __find_device(&fs_devices->devices, devid,
+               device = find_device(fs_devices, devid,
                                       disk_super->dev_item.uuid);
        }
        if (!device) {
@@ -1682,8 +1690,7 @@
                if (!fsid ||
                    (!memcmp(cur_devices->fsid, fsid, BTRFS_UUID_SIZE) ||
                     fs_info->ignore_fsid_mismatch)) {
-                       device = __find_device(&cur_devices->devices,
-                                              devid, uuid);
+                       device = find_device(cur_devices, devid, uuid);
                        if (device)
                                return device;
                }


Reply via email to