94509b79b1
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.kornilov@gmail.com>
Fixes:
|
||
---|---|---|
.. | ||
common | ||
crypto | ||
kernel-shared | ||
btrfs.c | ||
btrfs.h | ||
compat.h | ||
compression.c | ||
conv-funcs.h | ||
ctree.c | ||
ctree.h | ||
dev.c | ||
dir-item.c | ||
disk-io.c | ||
disk-io.h | ||
extent-cache.c | ||
extent-cache.h | ||
extent-io.c | ||
extent-io.h | ||
inode.c | ||
Kconfig | ||
Makefile | ||
root-tree.c | ||
subvolume.c | ||
volumes.c | ||
volumes.h |