summaryrefslogtreecommitdiff
path: root/sys-boot/os-prober/files/os-prober-fix-btrfs-subvol-mounted-tests.patch
diff options
context:
space:
mode:
Diffstat (limited to 'sys-boot/os-prober/files/os-prober-fix-btrfs-subvol-mounted-tests.patch')
-rw-r--r--sys-boot/os-prober/files/os-prober-fix-btrfs-subvol-mounted-tests.patch84
1 files changed, 84 insertions, 0 deletions
diff --git a/sys-boot/os-prober/files/os-prober-fix-btrfs-subvol-mounted-tests.patch b/sys-boot/os-prober/files/os-prober-fix-btrfs-subvol-mounted-tests.patch
new file mode 100644
index 00000000..d56e0948
--- /dev/null
+++ b/sys-boot/os-prober/files/os-prober-fix-btrfs-subvol-mounted-tests.patch
@@ -0,0 +1,84 @@
+Index: os-prober-1.76/os-probes/common/50mounted-tests
+===================================================================
+--- os-prober-1.76.orig/os-probes/common/50mounted-tests
++++ os-prober-1.76/os-probes/common/50mounted-tests
+@@ -65,10 +65,40 @@ fi
+
+ mounted=
+
++if [ "$types" = btrfs ]; then
++ partition="$BTRFSDEV"
++fi
++
++if type grub2-mount >/dev/null 2>&1 && \
++ type grub2-probe >/dev/null 2>&1 && \
++ grub2-mount "$partition" "$tmpmnt" 2>/dev/null; then
++ mounted=1
++ type="$(grub2-probe -d "$partition" -t fs)" || true
++ if [ "$type" ]; then
++ debug "mounted using GRUB $type filesystem driver"
++ else
++ debug "mounted using GRUB, but unknown filesystem?"
++ type=fuseblk
++ fi
++fi
++
++if [ "$mounted" ]; then
++ for test in /usr/lib/os-probes/mounted/*; do
++ debug "running subtest $test"
++ if [ -f "$test" ] && [ -x "$test" ]; then
++ if "$test" "$partition" "$tmpmnt" "$type"; then
++ debug "os found by subtest $test"
++ do_unmount
++ exit 0
++ fi
++ fi
++ done
++fi
++do_unmount
++
+ # all btrfs processing here. Handle both unmounted and
+ # mounted subvolumes.
+ if [ "$types" = btrfs ]; then
+- partition="$BTRFSDEV"
+ debug "begin btrfs processing for $UUID"
+ # note that the btrfs volume must not be mounted ro
+ if mount -t btrfs -U "$UUID" "$tmpmnt" 2>/dev/null; then
+@@ -129,37 +159,8 @@ if [ "$types" = btrfs ]; then
+ rmdir "$tmpmnt" || true
+ if [ "$found" ]; then
+ exit 0
+- else
+- exit 1
+- fi
+-fi
+-
+-if type grub2-mount >/dev/null 2>&1 && \
+- type grub2-probe >/dev/null 2>&1 && \
+- grub2-mount "$partition" "$tmpmnt" 2>/dev/null; then
+- mounted=1
+- type="$(grub2-probe -d "$partition" -t fs)" || true
+- if [ "$type" ]; then
+- debug "mounted using GRUB $type filesystem driver"
+- else
+- debug "mounted using GRUB, but unknown filesystem?"
+- type=fuseblk
+ fi
+ fi
+
+-if [ "$mounted" ]; then
+- for test in /usr/lib/os-probes/mounted/*; do
+- debug "running subtest $test"
+- if [ -f "$test" ] && [ -x "$test" ]; then
+- if "$test" "$partition" "$tmpmnt" "$type"; then
+- debug "os found by subtest $test"
+- do_unmount
+- exit 0
+- fi
+- fi
+- done
+-fi
+-do_unmount
+-
+ # No tests found anything.
+ exit 1