Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package u-boot for openSUSE:Factory checked 
in at 2021-08-05 20:47:47
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/u-boot (Old)
 and      /work/SRC/openSUSE:Factory/.u-boot.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "u-boot"

Thu Aug  5 20:47:47 2021 rev:152 rq:909899 version:2021.07

Changes:
--------
--- /work/SRC/openSUSE:Factory/u-boot/u-boot.changes    2021-07-28 
19:19:55.491644585 +0200
+++ /work/SRC/openSUSE:Factory/.u-boot.new.1899/u-boot.changes  2021-08-05 
20:48:01.735937029 +0200
@@ -1,0 +2,7 @@
+Tue Aug  3 08:18:32 UTC 2021 - Guillaume GARDET <guillaume.gar...@opensuse.org>
+
+Patch queue updated from https://github.com/openSUSE/u-boot.git 
tumbleweed-2021.07
+* Patches added:
+  0014-btrfs-Use-default-subvolume-as-file.patch - boo#1185656
+
+-------------------------------------------------------------------

New:
----
  0014-btrfs-Use-default-subvolume-as-file.patch

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

Other differences:
------------------
++++++ u-boot.spec ++++++
--- /var/tmp/diff_new_pack.xNMbnV/_old  2021-08-05 20:48:02.543936122 +0200
+++ /var/tmp/diff_new_pack.xNMbnV/_new  2021-08-05 20:48:02.555936109 +0200
@@ -233,6 +233,7 @@
 Patch0011:      0011-Disable-CONFIG_CMD_BTRFS-in-xilinx_.patch
 Patch0012:      0012-smbios-Fix-table-when-no-string-is-.patch
 Patch0013:      0013-configs-rpi-Enable-SMBIOS-sysinfo-d.patch
+Patch0014:      0014-btrfs-Use-default-subvolume-as-file.patch
 # Patches: end
 BuildRequires:  bc
 BuildRequires:  bison

++++++ 0014-btrfs-Use-default-subvolume-as-file.patch ++++++
>From 6d31a7a47e0a3f66304fb033a9e8c9a78e1bc661 Mon Sep 17 00:00:00 2001
From: "Matwey V. Kornilov" <matwey.korni...@gmail.com>
Date: Sun, 1 Aug 2021 23:52:16 +0300
Subject: [PATCH] btrfs: Use default subvolume as filesystem root

BTRFS volume consists of a number of subvolumes which can be mounted separately
from each other. The top-level subvolume always exists even if no subvolumes
were created manually. A subvolume can be denoted as the default subvolume i.e.
the subvolume which is mounted by default.

The default "default subvolume" is the top-level one, but this is far from the
common practices used in the wild. For instance, openSUSE provides an OS
snapshot/rollback feature based on BTRFS. To achieve this, the actual OS root
filesystem is located into a separate subvolume which is "default" but not
"top-level". That means that the /boot/dtb/ directory is also located inside
this default subvolume instead of top-level one.

However, the existing btrfs u-boot driver always uses the top-level subvolume
as the filesystem root. This behaviour 1) is inconsistent with

    mount /dev/sda1 /target

command, which mount the default subvolume 2) leads to the issues when
/boot/dtb cannot be found properly (see the reference).

This patch uses the default subvolume as the filesystem root to overcome
mentioned issues.

Reference: https://bugzilla.suse.com/show_bug.cgi?id=1185656
Signed-off-by: Matwey V. Kornilov <matwey.korni...@gmail.com>
Reviewed-by: Qu Wenruo <w...@suse.com>
---
 fs/btrfs/disk-io.c | 38 +++++++++++++++++++++++++++++++++++---
 1 file changed, 35 insertions(+), 3 deletions(-)

diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 349411c3cc..12f9579fcf 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -804,6 +804,30 @@ static int setup_root_or_create_block(struct btrfs_fs_info 
*fs_info,
        return 0;
 }
 
+static int get_default_subvolume(struct btrfs_fs_info *fs_info,
+                                struct btrfs_key *key_ret)
+{
+       struct btrfs_root *root = fs_info->tree_root;
+       struct btrfs_dir_item *dir_item;
+       struct btrfs_path path;
+       int ret = 0;
+
+       btrfs_init_path(&path);
+
+       dir_item = btrfs_lookup_dir_item(NULL, root, &path,
+                                        BTRFS_ROOT_TREE_DIR_OBJECTID,
+                                        "default", 7, 0);
+       if (IS_ERR(dir_item)) {
+               ret = PTR_ERR(dir_item);
+               goto out;
+       }
+
+       btrfs_dir_item_key_to_cpu(path.nodes[0], dir_item, key_ret);
+out:
+       btrfs_release_path(&path);
+       return ret;
+}
+
 int btrfs_setup_all_roots(struct btrfs_fs_info *fs_info)
 {
        struct btrfs_super_block *sb = fs_info->super_copy;
@@ -833,9 +857,17 @@ int btrfs_setup_all_roots(struct btrfs_fs_info *fs_info)
 
        fs_info->last_trans_committed = generation;
 
-       key.objectid = BTRFS_FS_TREE_OBJECTID;
-       key.type = BTRFS_ROOT_ITEM_KEY;
-       key.offset = (u64)-1;
+       ret = get_default_subvolume(fs_info, &key);
+       if (ret) {
+               /*
+                * The default dir item isn't there. Linux kernel behaviour is
+                * to silently use the top-level subvolume in this case.
+                */
+               key.objectid = BTRFS_FS_TREE_OBJECTID;
+               key.type = BTRFS_ROOT_ITEM_KEY;
+               key.offset = (u64)-1;
+       }
+
        fs_info->fs_root = btrfs_read_fs_root(fs_info, &key);
 
        if (IS_ERR(fs_info->fs_root))

Reply via email to