Hello community,

here is the log from the commit of package btrfsprogs for openSUSE:Factory 
checked in at 2013-11-28 16:50:38
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/btrfsprogs (Old)
 and      /work/SRC/openSUSE:Factory/.btrfsprogs.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "btrfsprogs"

Changes:
--------
--- /work/SRC/openSUSE:Factory/btrfsprogs/btrfsprogs.changes    2013-11-01 
17:41:12.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.btrfsprogs.new/btrfsprogs.changes       
2013-11-28 16:50:40.000000000 +0100
@@ -1,0 +2,8 @@
+Mon Nov 25 14:10:55 CET 2013 - dste...@suse.cz
+
+- bump version to 3.12
+- update tarball and remove upstreamed patches
+- fsck, image, restore: various improvements and fixes
+- btrfs: quota rescan (fate#312751)
+
+-------------------------------------------------------------------

Old:
----
  0010-Btrfs-progs-make-btrfsck-a-hardlink-at-install-time.patch
  0012-libbtrfs-Set-SONAME-to-libbtrfs.so.0-instead-of-libb.patch
  0040-btrfs-progs-fix-loop-device-mount-checks.patch
  0050-Btrfs-progs-commit-the-csum_root-if-we-do-init-csum-.patch
  0051-btrfs-progs-Fix-getopt-on-arm-ppc-platforms.patch
  0052-btrfs-progs-fix-duplicate-__-su-typedefs-on-ppc64.patch
  0053-btrfs-progs-use-reentrant-localtime.patch
  0054-btrfs-progs-don-t-have-to-report-ENOMEDIUM-error-dur.patch
  0055-Btrfs-progs-added-btrfs-quota-rescan-w-switch-wait.patch
  0056-btrfs-progs-fix-qgroup-realloc-inheritance.patch
  0057-Btrfs-progs-fix-restore-command-leaving-corrupted-fi.patch
  0058-btrfs-progs-avoid-write-to-the-disk-before-sure-to-c.patch
  0059-btrfs-progs-error-if-device-for-mkfs-is-too-small.patch
  0060-btrfs-progs-error-if-device-have-no-space-to-make-pr.patch
  0061-btrfs-progs-calculate-available-blocks-on-device-pro.patch
  0062-Btrfs-progs-keep-track-of-transid-failures-and-fix-t.patch
  btrfs-dev-clear-sb
  btrfs-progs-add-man-page-for-btrfs-convert.patch
  btrfs-progs-mkfs-default-extref.diff
  btrfs-progs-restore-passing-of-super_bytenr-to-device-scan
  btrfs-progs-use-IEEE1541-suffixes-for-sizes.patch
  btrfs-progs-v0.20-rc1-358-g194aa4a.tar.bz2

New:
----
  0162-btrfs-progs-fix-loop-device-mount-checks.patch
  0163-btrfs-progs-fsck-fix-segfault.patch
  0164-btrfs-progs-convert-set-label-or-copy-from-origin.patch
  0165-Revert-btrfs-progs-update-options-in-find-root.c.patch
  0166-Btrfs-progs-add-some-verbose-output-to-find-root.patch
  0167-Btrfs-progs-make-find_and_setup_root-return-an-error.patch
  0168-Btrfs-progs-don-t-bug-out-if-we-can-t-find-the-last-.patch
  0169-btrfs-progs-Check-metadata-mirrors-in-find-root.patch
  0170-btrfs-progs-In-find-root-dump-bytenr-for-every-slot.patch
  btrfs-progs-v3.12.tar.bz2

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

Other differences:
------------------
++++++ btrfsprogs.spec ++++++
--- /var/tmp/diff_new_pack.npvxdI/_old  2013-11-28 16:50:41.000000000 +0100
+++ /var/tmp/diff_new_pack.npvxdI/_new  2013-11-28 16:50:41.000000000 +0100
@@ -18,9 +18,9 @@
 
 Name:           btrfsprogs
 Url:            http://btrfs.wiki.kernel.org/index.php/Main_Page
-Version:        0.20
+Version:        3.12
 Release:        0
-%define tar_version v0.20-rc1-358-g194aa4a
+%define tar_version v3.12
 Summary:        Utilities for the Btrfs filesystem
 License:        GPL-2.0
 Group:          System/Filesystems
@@ -30,28 +30,18 @@
 Source:         btrfs-progs-%{tar_version}.tar.bz2
 Source1:        boot-btrfs.sh
 Source4:        setup-btrfs.sh
-Source2:        btrfs-dev-clear-sb
-Patch10:        0010-Btrfs-progs-make-btrfsck-a-hardlink-at-install-time.patch
-Patch12:        0012-libbtrfs-Set-SONAME-to-libbtrfs.so.0-instead-of-libb.patch
-Patch40:        0040-btrfs-progs-fix-loop-device-mount-checks.patch
-Patch1:         btrfs-progs-mkfs-default-extref.diff
-Patch50:        0050-Btrfs-progs-commit-the-csum_root-if-we-do-init-csum-.patch
-Patch51:        0051-btrfs-progs-Fix-getopt-on-arm-ppc-platforms.patch
-Patch52:        0052-btrfs-progs-fix-duplicate-__-su-typedefs-on-ppc64.patch
-Patch53:        0053-btrfs-progs-use-reentrant-localtime.patch
-Patch54:        0054-btrfs-progs-don-t-have-to-report-ENOMEDIUM-error-dur.patch
-Patch55:        0055-Btrfs-progs-added-btrfs-quota-rescan-w-switch-wait.patch
-Patch56:        0056-btrfs-progs-fix-qgroup-realloc-inheritance.patch
-Patch57:        0057-Btrfs-progs-fix-restore-command-leaving-corrupted-fi.patch
-Patch58:        0058-btrfs-progs-avoid-write-to-the-disk-before-sure-to-c.patch
-Patch59:        0059-btrfs-progs-error-if-device-for-mkfs-is-too-small.patch
-Patch60:        0060-btrfs-progs-error-if-device-have-no-space-to-make-pr.patch
-Patch61:        0061-btrfs-progs-calculate-available-blocks-on-device-pro.patch
-Patch62:        0062-Btrfs-progs-keep-track-of-transid-failures-and-fix-t.patch
+
+Patch162:       0162-btrfs-progs-fix-loop-device-mount-checks.patch
+Patch163:       0163-btrfs-progs-fsck-fix-segfault.patch
+Patch164:       0164-btrfs-progs-convert-set-label-or-copy-from-origin.patch
+Patch165:       0165-Revert-btrfs-progs-update-options-in-find-root.c.patch
+Patch166:       0166-Btrfs-progs-add-some-verbose-output-to-find-root.patch
+Patch167:       0167-Btrfs-progs-make-find_and_setup_root-return-an-error.patch
+Patch168:       0168-Btrfs-progs-don-t-bug-out-if-we-can-t-find-the-last-.patch
+Patch169:       0169-btrfs-progs-Check-metadata-mirrors-in-find-root.patch
+Patch170:       0170-btrfs-progs-In-find-root-dump-bytenr-for-every-slot.patch
+
 Patch1000:      local-version-override.patch
-Patch1001:      btrfs-progs-use-IEEE1541-suffixes-for-sizes.patch
-Patch1002:      btrfs-progs-add-man-page-for-btrfs-convert.patch
-Patch1003:      btrfs-progs-restore-passing-of-super_bytenr-to-device-scan
 
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildRequires:  libacl-devel
@@ -88,27 +78,16 @@
 
 %prep
 %setup -q -n btrfs-progs-%{tar_version}
-%patch10 -p1
-%patch12 -p1
-%patch40 -p1
-%patch1 -p1
+%patch162 -p1
+%patch163 -p1
+%patch164 -p1
+%patch165 -p1
+%patch166 -p1
+%patch167 -p1
+%patch168 -p1
+%patch169 -p1
+%patch170 -p1
 %patch1000 -p1
-%patch1001 -p1
-%patch1002 -p1
-%patch1003 -p1
-%patch50 -p1
-%patch51 -p1
-%patch52 -p1
-%patch53 -p1
-%patch54 -p1
-%patch55 -p1
-%patch56 -p1
-%patch57 -p1
-%patch58 -p1
-%patch59 -p1
-%patch60 -p1
-%patch61 -p1
-%patch62 -p1
 
 %build
 make %{?_smp_mflags} CFLAGS="%{optflags}" all btrfs-convert \
@@ -150,7 +129,6 @@
 install -d -m0755 ${RPM_BUILD_ROOT}/lib/mkinitrd/scripts/
 install -m 0755 %{S:1} ${RPM_BUILD_ROOT}/lib/mkinitrd/scripts/
 install -m 0755 %{S:4} ${RPM_BUILD_ROOT}/lib/mkinitrd/scripts/
-install -m 0755 %{S:2} ${RPM_BUILD_ROOT}/usr/sbin/
 rm -f ${RPM_BUILD_ROOT}/%{_libdir}/*.la
 # don't install .a for now
 rm -f ${RPM_BUILD_ROOT}/%{_libdir}/*.a
@@ -188,17 +166,21 @@
 %{_sbindir}/mkfs.btrfs
 %{_sbindir}/btrfs-debug-tree
 %{_sbindir}/btrfs-show-super
-/usr/sbin/btrfs-dev-clear-sb
 /lib/mkinitrd/scripts/boot-btrfs.sh
 /lib/mkinitrd/scripts/setup-btrfs.sh
 # other
 /usr/bin/btrfs-map-logical
-/usr/sbin/btrfs-dev-clear-sb
 %_mandir/man8/btrfs-image.8.gz
 %_mandir/man8/btrfsck.8.gz
 %_mandir/man8/mkfs.btrfs.8.gz
 %_mandir/man8/btrfs.8.gz
 %_mandir/man8/btrfs-convert.8.gz
+%_mandir/man8/btrfs-debug-tree.8.gz
+%_mandir/man8/btrfs-find-root.8.gz
+%_mandir/man8/btrfs-map-logical.8.gz
+%_mandir/man8/btrfs-show-super.8.gz
+%_mandir/man8/btrfs-zero-log.8.gz
+%_mandir/man8/btrfstune.8.gz
 
 %files -n libbtrfs0
 %defattr(-, root, root)

++++++ 0040-btrfs-progs-fix-loop-device-mount-checks.patch -> 
0162-btrfs-progs-fix-loop-device-mount-checks.patch ++++++
--- 
/work/SRC/openSUSE:Factory/btrfsprogs/0040-btrfs-progs-fix-loop-device-mount-checks.patch
   2013-08-27 20:32:47.000000000 +0200
+++ 
/work/SRC/openSUSE:Factory/.btrfsprogs.new/0162-btrfs-progs-fix-loop-device-mount-checks.patch
      2013-11-28 16:50:38.000000000 +0100
@@ -1,7 +1,7 @@
-From be65fb331902152d9b571b2d4ee1bf26bedc795f Mon Sep 17 00:00:00 2001
+From fa69bc83f210e7940adf1051709178e493f58002 Mon Sep 17 00:00:00 2001
 From: David Sterba <dste...@suse.cz>
 Date: Thu, 27 Oct 2011 16:23:14 -0400
-Subject: [PATCH 40/46] btrfs-progs: fix loop device mount checks
+Subject: [PATCH 162/170] btrfs-progs: fix loop device mount checks
 
 When creating a fs on a loop device, mkfs checks whether the same file
 is not already mounted, but the backing file of another loop dev may not
@@ -12,11 +12,11 @@
  utils.c | 34 +++++++++++++++++++---------------
  1 file changed, 19 insertions(+), 15 deletions(-)
 
-diff --git a/utils.c b/utils.c
-index 41bfdb0..47b31fc 100644
---- a/utils.c
-+++ b/utils.c
-@@ -773,11 +773,11 @@ int is_same_blk_file(const char* a, const char* b)
+Index: btrfs-progs-v0.20-rc1-598-g8116550e1662/utils.c
+===================================================================
+--- btrfs-progs-v0.20-rc1-598-g8116550e1662.orig/utils.c
++++ btrfs-progs-v0.20-rc1-598-g8116550e1662/utils.c
+@@ -831,11 +831,11 @@ static int is_same_blk_file(const char*
        char real_a[PATH_MAX];
        char real_b[PATH_MAX];
  
@@ -33,7 +33,7 @@
  
        /* Identical path? */
        if(strcmp(real_a, real_b) == 0)
-@@ -818,8 +818,8 @@ int is_same_loop_file(const char* a, const char* b)
+@@ -876,8 +876,8 @@ static int is_same_loop_file(const char*
  {
        char res_a[PATH_MAX];
        char res_b[PATH_MAX];
@@ -44,7 +44,7 @@
        int ret;
  
        /* Resolve a if it is a loop device */
-@@ -828,10 +828,12 @@ int is_same_loop_file(const char* a, const char* b)
+@@ -886,10 +886,12 @@ static int is_same_loop_file(const char*
                        return 0;
                return ret;
        } else if (ret) {
@@ -61,7 +61,7 @@
        } else {
                final_a = a;
        }
-@@ -842,10 +844,12 @@ int is_same_loop_file(const char* a, const char* b)
+@@ -900,10 +902,12 @@ static int is_same_loop_file(const char*
                        return 0;
                return ret;
        } else if (ret) {
@@ -78,6 +78,3 @@
        } else {
                final_b = b;
        }
--- 
-1.8.0.2
-

++++++ 0163-btrfs-progs-fsck-fix-segfault.patch ++++++
>From f0294c7f1135acd58320c8282ed68a337138a7c7 Mon Sep 17 00:00:00 2001
From: David Sterba <dste...@suse.cz>
Date: Mon, 30 Apr 2012 17:46:53 +0200
Subject: [PATCH 163/170] btrfs-progs: fsck: fix segfault

fix from Chris Mason via pastebin

Signed-off-by: David Sterba <dste...@suse.cz>
---
 cmds-check.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Index: btrfs-progs-v0.20-rc1-598-g8116550e1662/cmds-check.c
===================================================================
--- btrfs-progs-v0.20-rc1-598-g8116550e1662.orig/cmds-check.c
+++ btrfs-progs-v0.20-rc1-598-g8116550e1662/cmds-check.c
@@ -2209,7 +2209,8 @@ static int check_owner_ref(struct btrfs_
                if (btrfs_header_owner(buf) == back->root)
                        return 0;
        }
-       BUG_ON(rec->is_root);
+       if (rec->is_root)
+               return 1;
 
        /* try to find the block by search corresponding fs tree */
        key.objectid = btrfs_header_owner(buf);
++++++ 0164-btrfs-progs-convert-set-label-or-copy-from-origin.patch ++++++
>From f160d979c4f8d46a9d0a52394240d51b78237d89 Mon Sep 17 00:00:00 2001
From: David Sterba <dste...@suse.cz>
Date: Tue, 31 Jan 2012 14:40:22 +0100
Subject: [PATCH 164/170] btrfs-progs: convert: set label or copy from origin

Signed-off-by: David Sterba <dste...@suse.cz>
---
 btrfs-convert.c | 47 ++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 38 insertions(+), 9 deletions(-)

Index: btrfs-progs-v0.20-rc1-598-g8116550e1662/btrfs-convert.c
===================================================================
--- btrfs-progs-v0.20-rc1-598-g8116550e1662.orig/btrfs-convert.c
+++ btrfs-progs-v0.20-rc1-598-g8116550e1662/btrfs-convert.c
@@ -2199,8 +2199,8 @@ err:
        return ret;
 }
 
-static int do_convert(const char *devname, int datacsum, int packing,
-               int noxattr)
+static int do_convert(const char *devname, int datacsum, int packing, int 
noxattr,
+              int copylabel, const char *fslabel)
 {
        int i, ret;
        int fd = -1;
@@ -2294,6 +2294,17 @@ static int do_convert(const char *devnam
                fprintf(stderr, "error during create_ext2_image %d\n", ret);
                goto fail;
        }
+       memset(root->fs_info->super_copy->label, 0, BTRFS_LABEL_SIZE);
+       if (copylabel == 1) {
+               strncpy(root->fs_info->super_copy->label,
+                               ext2_fs->super->s_volume_name, 16);
+               fprintf(stderr, "copy label '%s'\n",
+                               root->fs_info->super_copy->label);
+       } else if (copylabel == -1) {
+               strncpy(root->fs_info->super_copy->label, fslabel, 
BTRFS_LABEL_SIZE);
+               fprintf(stderr, "set label to '%s'\n", fslabel);
+       }
+
        printf("cleaning up system chunk.\n");
        ret = cleanup_sys_chunk(root, ext2_root);
        if (ret) {
@@ -2688,11 +2699,13 @@ fail:
 
 static void print_usage(void)
 {
-       printf("usage: btrfs-convert [-d] [-i] [-n] [-r] device\n");
-       printf("\t-d disable data checksum\n");
-       printf("\t-i ignore xattrs and ACLs\n");
-       printf("\t-n disable packing of small files\n");
-       printf("\t-r roll back to ext2fs\n");
+       printf("usage: btrfs-convert [-d] [-i] [-n] [-r] [-l label] [-L] 
device\n");
+       printf("\t-d           disable data checksum\n");
+       printf("\t-i           ignore xattrs and ACLs\n");
+       printf("\t-n           disable packing of small files\n");
+       printf("\t-r           roll back to ext2fs\n");
+       printf("\t-l LABEL     set filesystem label\n");
+       printf("\t-L           use label from converted fs\n");
 }
 
 int main(int argc, char *argv[])
@@ -2702,9 +2715,12 @@ int main(int argc, char *argv[])
        int noxattr = 0;
        int datacsum = 1;
        int rollback = 0;
+       int copylabel = 0;
        char *file;
+       char *fslabel = NULL;
+
        while(1) {
-               int c = getopt(argc, argv, "dinr");
+               int c = getopt(argc, argv, "dinrl:L");
                if (c < 0)
                        break;
                switch(c) {
@@ -2720,6 +2736,19 @@ int main(int argc, char *argv[])
                        case 'r':
                                rollback = 1;
                                break;
+                       case 'l':
+                               copylabel = -1;
+                               fslabel = strdup(optarg);
+                               if (strlen(fslabel) > BTRFS_LABEL_SIZE) {
+                                       fprintf(stderr,
+                                               "warning: label too long, 
trimmed to %d bytes\n",
+                                               BTRFS_LABEL_SIZE);
+                                       fslabel[BTRFS_LABEL_SIZE]=0;
+                               }
+                               break;
+                       case 'L':
+                               copylabel = 1;
+                               break;
                        default:
                                print_usage();
                                return 1;
@@ -2740,7 +2769,7 @@ int main(int argc, char *argv[])
        if (rollback) {
                ret = do_rollback(file, 0);
        } else {
-               ret = do_convert(file, datacsum, packing, noxattr);
+               ret = do_convert(file, datacsum, packing, noxattr, copylabel, 
fslabel);
        }
        if (ret)
                return 1;
++++++ 0165-Revert-btrfs-progs-update-options-in-find-root.c.patch ++++++
>From 0c26634f696f3ced9636de0ca2fa5b7b9d732bc3 Mon Sep 17 00:00:00 2001
From: David Sterba <dste...@suse.cz>
Date: Thu, 7 Feb 2013 18:00:23 +0100
Subject: [PATCH 165/170] Revert "btrfs-progs: update options in find-root.c"

This reverts commit 7f04a61b6da5a1231454b07e3e37cc24601a76e4.

Reintroduce the 'verbose' option.

Signed-off-by: David Sterba <dste...@suse.cz>
---
 btrfs-find-root.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

Index: btrfs-progs-v0.20-rc1-598-g8116550e1662/btrfs-find-root.c
===================================================================
--- btrfs-progs-v0.20-rc1-598-g8116550e1662.orig/btrfs-find-root.c
+++ btrfs-progs-v0.20-rc1-598-g8116550e1662/btrfs-find-root.c
@@ -35,6 +35,7 @@
 #include "utils.h"
 #include "crc32c.h"
 
+static int verbose = 0;
 static u16 csum_size = 0;
 static u64 search_objectid = BTRFS_ROOT_TREE_OBJECTID;
 static u64 search_generation = 0;
@@ -42,7 +43,7 @@ static unsigned long search_level = 0;
 
 static void usage(void)
 {
-       fprintf(stderr, "Usage: find-roots [-o search_objectid] "
+       fprintf(stderr, "Usage: find-roots [-v] "
                "[ -g search_generation ] [ -l search_level ] <device>\n");
 }
 
@@ -286,9 +287,12 @@ int main(int argc, char **argv)
        int opt;
        int ret;
 
-       while ((opt = getopt(argc, argv, "l:o:g:")) != -1) {
+       while ((opt = getopt(argc, argv, "l:o:g:v")) != -1) {
                switch(opt) {
                        errno = 0;
+                       case 'v':
+                               verbose++;
+                               break;
                        case 'o':
                                search_objectid = (u64)strtoll(optarg, NULL,
                                                               10);
++++++ 0166-Btrfs-progs-add-some-verbose-output-to-find-root.patch ++++++
>From 3d75a27a857ae81f7cd64de886a293208be15af6 Mon Sep 17 00:00:00 2001
From: Josef Bacik <jo...@redhat.com>
Date: Wed, 4 Jan 2012 10:03:33 -0500
Subject: [PATCH 166/170] Btrfs-progs: add some verbose output to find-root

Trying to track down why we can't find roots, add some verbose output so we know
what chunks we're scanning and when we move to new chunks.  Thanks,

Signed-off-by: Josef Bacik <jo...@redhat.com>
---
 btrfs-find-root.c | 9 +++++++++
 1 file changed, 9 insertions(+)

Index: btrfs-progs-v0.20-rc1-598-g8116550e1662/btrfs-find-root.c
===================================================================
--- btrfs-progs-v0.20-rc1-598-g8116550e1662.orig/btrfs-find-root.c
+++ btrfs-progs-v0.20-rc1-598-g8116550e1662/btrfs-find-root.c
@@ -229,6 +229,10 @@ static int find_root(struct btrfs_root *
                return ret;
 
        offset = metadata_offset;
+       if (verbose)
+               printf("Checking metadata chunk %Lu, size %Lu\n",
+                      metadata_offset, metadata_size);
+
        while (1) {
                u64 map_length = 4096;
                u64 type;
@@ -239,6 +243,8 @@ static int find_root(struct btrfs_root *
                        break;
                }
                if (offset >= (metadata_offset + metadata_size)) {
+                       if (verbose)
+                               printf("Moving to the next metadata chunk\n");
                        err = btrfs_next_metadata(&root->fs_info->mapping_tree,
                                                  &metadata_offset,
                                                  &metadata_size);
@@ -247,6 +253,9 @@ static int find_root(struct btrfs_root *
                                break;
                        }
                        offset = metadata_offset;
+                       if (verbose)
+                               printf("Checking metadata chunk %Lu, size %Lu"
+                                      "\n", metadata_offset, metadata_size);
                }
                err = __btrfs_map_block(&root->fs_info->mapping_tree, READ,
                                      offset, &map_length, &type,
++++++ 0167-Btrfs-progs-make-find_and_setup_root-return-an-error.patch ++++++
>From cc4992b4c3610de4b30ea6a168573841e6cd43e5 Mon Sep 17 00:00:00 2001
From: Josef Bacik <jo...@redhat.com>
Date: Wed, 7 Dec 2011 16:11:23 -0500
Subject: [PATCH 167/170] Btrfs-progs: make find_and_setup_root return an error

Don't BUG(), return an error so the recovery program can work its mojo.

Signed-off-by: Josef Bacik <jo...@redhat.com>
---
 disk-io.c | 2 ++
 1 file changed, 2 insertions(+)

Index: btrfs-progs-v0.20-rc1-598-g8116550e1662/disk-io.c
===================================================================
--- btrfs-progs-v0.20-rc1-598-g8116550e1662.orig/disk-io.c
+++ btrfs-progs-v0.20-rc1-598-g8116550e1662/disk-io.c
@@ -524,6 +524,8 @@ static int find_and_setup_root(struct bt
        generation = btrfs_root_generation(&root->root_item);
        root->node = read_tree_block(root, btrfs_root_bytenr(&root->root_item),
                                     blocksize, generation);
+       if (!root->node)
+               return -ENOENT;
        if (!extent_buffer_uptodate(root->node))
                return -EIO;
 
++++++ 0168-Btrfs-progs-don-t-bug-out-if-we-can-t-find-the-last-.patch ++++++
>From 6c90b5f56a389b37fcdd85e6dd904288d601b27a Mon Sep 17 00:00:00 2001
From: Josef Bacik <jo...@redhat.com>
Date: Wed, 7 Dec 2011 15:54:13 -0500
Subject: [PATCH 168/170] Btrfs-progs: don't bug out if we can't find the last
 root

Return an error instead of BUG()'ing out.

Signed-off-by: Josef Bacik <jo...@redhat.com>
---
 root-tree.c | 5 +++++
 1 file changed, 5 insertions(+)

Index: btrfs-progs-v0.20-rc1-598-g8116550e1662/root-tree.c
===================================================================
--- btrfs-progs-v0.20-rc1-598-g8116550e1662.orig/root-tree.c
+++ btrfs-progs-v0.20-rc1-598-g8116550e1662/root-tree.c
@@ -45,6 +45,11 @@ int btrfs_find_last_root(struct btrfs_ro
 
        BUG_ON(ret == 0);
        l = path->nodes[0];
+       if (path->slots[0] == 0) {
+               ret = -ENOENT;
+               goto out;
+       }
+
        slot = path->slots[0] - 1;
        btrfs_item_key_to_cpu(l, &found_key, slot);
        if (found_key.objectid != objectid) {
++++++ 0169-btrfs-progs-Check-metadata-mirrors-in-find-root.patch ++++++
>From 4469ed43b26b6e7d5ad5cfea45e99708e39de4a6 Mon Sep 17 00:00:00 2001
From: David Marcin <djmar...@google.com>
Date: Wed, 16 Nov 2011 12:18:08 -0800
Subject: [PATCH 169/170] btrfs-progs: Check metadata mirrors in find-root.

Signed-off-by: David Marcin <djmar...@google.com>
---
 btrfs-find-root.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/btrfs-find-root.c b/btrfs-find-root.c
index 7f7b64f..ffbdde1 100644
--- a/btrfs-find-root.c
+++ b/btrfs-find-root.c
@@ -236,6 +236,8 @@ static int find_root(struct btrfs_root *root)
        while (1) {
                u64 map_length = 4096;
                u64 type;
+               int mirror_num;
+               int num_copies;
 
                if (offset >
                    btrfs_super_total_bytes(root->fs_info->super_copy)) {
@@ -257,9 +259,11 @@ static int find_root(struct btrfs_root *root)
                                printf("Checking metadata chunk %Lu, size %Lu"
                                       "\n", metadata_offset, metadata_size);
                }
+               mirror_num = 1;
+       again:
                err = __btrfs_map_block(&root->fs_info->mapping_tree, READ,
                                      offset, &map_length, &type,
-                                     &multi, 0, NULL);
+                                     &multi, mirror_num, NULL);
                if (err) {
                        offset += map_length;
                        continue;
@@ -278,9 +282,16 @@ static int find_root(struct btrfs_root *root)
 
                err = read_physical(root, fd, offset, bytenr, map_length);
                if (!err) {
+                       /* Found the root. */
                        ret = 0;
                        break;
                } else if (err < 0) {
+                       num_copies = 
btrfs_num_copies(&root->fs_info->mapping_tree,
+                                                     offset, map_length);
+                       mirror_num++;
+                       if (mirror_num <= num_copies)
+                               goto again;
+                       /* Unrecoverable error in read. */
                        ret = err;
                        break;
                }
-- 
1.8.3.1

++++++ 0170-btrfs-progs-In-find-root-dump-bytenr-for-every-slot.patch ++++++
>From 1e9e1d5c876a4c281b3b9e72f4cbaaef1e3a2fa5 Mon Sep 17 00:00:00 2001
From: David Marcin <djmar...@google.com>
Date: Mon, 21 Nov 2011 20:51:15 -0600
Subject: [PATCH 170/170] btrfs-progs: In find-root, dump bytenr for every
 slot.

Signed-off-by: David Marcin <djmar...@google.com>
---
 btrfs-find-root.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 59 insertions(+), 1 deletion(-)

diff --git a/btrfs-find-root.c b/btrfs-find-root.c
index ffbdde1..00b10e7 100644
--- a/btrfs-find-root.c
+++ b/btrfs-find-root.c
@@ -127,8 +127,63 @@ out:
        return NULL;
 }
 
+static int dump_root_bytenr(struct btrfs_root *root, u64 bytenr, u64 gen)
+{
+       struct btrfs_root *tmp = malloc(sizeof(struct btrfs_root));
+       struct btrfs_path *path;
+       struct btrfs_key key;
+       struct btrfs_root_item ri;
+       struct extent_buffer *leaf;
+       struct btrfs_disk_key disk_key;
+       struct btrfs_key found_key;
+       int slot;
+       int ret;
+
+       if (!tmp)
+               return -ENOMEM;
+
+       __setup_root(4096, 4096, 4096, 4096, tmp,
+                    root->fs_info, BTRFS_ROOT_TREE_OBJECTID);
+
+       tmp->node = read_tree_block(root, bytenr, 4096, gen);
+
+       key.objectid = 0;
+       key.type = BTRFS_ROOT_ITEM_KEY;
+       key.offset = -1;
+
+       path = btrfs_alloc_path();
+
+       /* Walk the slots of this root looking for BTRFS_ROOT_ITEM_KEYs. */
+       ret = btrfs_search_slot(NULL, tmp, &key, path, 0, 0);
+       BUG_ON(ret < 0);
+       while (1) {
+               leaf = path->nodes[0];
+               slot = path->slots[0];
+               if (slot >= btrfs_header_nritems(leaf)) {
+                       ret = btrfs_next_leaf(tmp, path);
+                       if (ret != 0)
+                               break;
+                       leaf = path->nodes[0];
+                       slot = path->slots[0];
+               }
+               btrfs_item_key(leaf, &disk_key, path->slots[0]);
+               btrfs_disk_key_to_cpu(&found_key, &disk_key);
+               if (btrfs_key_type(&found_key) == BTRFS_ROOT_ITEM_KEY) {
+                       unsigned long offset;
+
+                       offset = btrfs_item_ptr_offset(leaf, slot);
+                       read_extent_buffer(leaf, &ri, offset, sizeof(ri));
+                       printf("Generation: %Lu Root bytenr: %Lu\n", gen, 
btrfs_root_bytenr(&ri));
+               }
+               path->slots[0]++;
+       }
+       btrfs_free_path(path);
+       free_extent_buffer(leaf);
+       return 0;
+}
+
 static int search_iobuf(struct btrfs_root *root, void *iobuf,
-                       size_t iobuf_size, off_t offset)
+                        size_t iobuf_size, off_t offset)
 {
        u64 gen = search_generation;
        u64 objectid = search_objectid;
@@ -160,6 +215,9 @@ static int search_iobuf(struct btrfs_root *root, void 
*iobuf,
                                h_byte);
                        goto next;
                }
+               /* Found some kind of root and it's fairly valid. */
+               if (dump_root_bytenr(root, h_byte, h_gen))
+                       break;
                if (h_gen != gen) {
                        fprintf(stderr, "Well block %Lu seems great, "
                                "but generation doesn't match, "
-- 
1.8.3.1

++++++ btrfs-progs-v0.20-rc1-358-g194aa4a.tar.bz2 -> btrfs-progs-v3.12.tar.bz2 
++++++
++++ 20510 lines of diff (skipped)

++++++ local-version-override.patch ++++++
--- /var/tmp/diff_new_pack.npvxdI/_old  2013-11-28 16:50:42.000000000 +0100
+++ /var/tmp/diff_new_pack.npvxdI/_new  2013-11-28 16:50:42.000000000 +0100
@@ -6,8 +6,8 @@
  # Copyright 2008, Oracle
  # Released under the GNU GPLv2
   
--v="v0.20-rc1"
-+v="v0.20-rc1+20131031"
+-v="v3.12"
++v="v3.12+20131125"
  
  which git &> /dev/null
  if [ $? == 0 -a -d .git ]; then

-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to