From 639c2fee1cc4f228012687f0333c90b0213f326edff26a0ddb3c48bac44029e3 Mon Sep 17 00:00:00 2001 From: "Dr. Werner Fink" Date: Mon, 23 Dec 2013 12:07:20 +0000 Subject: [PATCH] Accepting request 211328 from home:michael-chang:12.3:bnc:846003 - add os-prober-fix-btrfs-subvol-mounted-tests.patch * move btrfs subvolume mounted tests after regualr rootfs tree tests to make sure that root and subvolume fs tree are tested. * the test order is just a preference, assuming that distribution are installed to root fs tree more likely than to a subvolume. OBS-URL: https://build.opensuse.org/request/show/211328 OBS-URL: https://build.opensuse.org/package/show/Base:System/os-prober?expand=0&rev=35 --- ...rober-fix-btrfs-subvol-mounted-tests.patch | 115 ++++++++++++++++++ os-prober.changes | 9 ++ os-prober.spec | 3 + 3 files changed, 127 insertions(+) create mode 100644 os-prober-fix-btrfs-subvol-mounted-tests.patch diff --git a/os-prober-fix-btrfs-subvol-mounted-tests.patch b/os-prober-fix-btrfs-subvol-mounted-tests.patch new file mode 100644 index 0000000..b7711e5 --- /dev/null +++ b/os-prober-fix-btrfs-subvol-mounted-tests.patch @@ -0,0 +1,115 @@ +Index: os-prober-1.61/os-probes/common/50mounted-tests +=================================================================== +--- os-prober-1.61.orig/os-probes/common/50mounted-tests ++++ os-prober-1.61/os-probes/common/50mounted-tests +@@ -56,10 +56,54 @@ fi + + mounted= + +-# all btrfs processing here. Handle both unmounted and +-# mounted subvolumes. + 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 ++else ++ ro_partition "$partition" ++ for type in $types; do ++ if mount -o ro -t "$type" "$partition" "$tmpmnt" 2>/dev/null; then ++ debug "mounted as $type filesystem" ++ mounted=1 ++ break ++ fi ++ done ++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" ++ if ! umount "$tmpmnt"; then ++ warn "failed to umount $tmpmnt" ++ fi ++ rmdir "$tmpmnt" || true ++ exit 0 ++ fi ++ fi ++ done ++ if ! umount "$tmpmnt"; then ++ warn "failed to umount $tmpmnt" ++ fi ++fi ++ ++# all btrfs subvol processing here. Handle both unmounted and ++# mounted subvolumes. ++if [ "$types" = btrfs ]; then + 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 +@@ -117,52 +161,9 @@ if [ "$types" = btrfs ]; then + fi + fi + done +- rmdir "$tmpmnt" || true + if [ "$found" ]; then ++ rmdir "$tmpmnt" || true + 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 +-else +- ro_partition "$partition" +- for type in $types; do +- if mount -o ro -t "$type" "$partition" "$tmpmnt" 2>/dev/null; then +- debug "mounted as $type filesystem" +- mounted=1 +- break +- fi +- done +-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" +- if ! umount "$tmpmnt"; then +- warn "failed to umount $tmpmnt" +- fi +- rmdir "$tmpmnt" || true +- exit 0 +- fi +- fi +- done +- if ! umount "$tmpmnt"; then +- warn "failed to umount $tmpmnt" + fi + fi + diff --git a/os-prober.changes b/os-prober.changes index b8d84c0..53590a5 100644 --- a/os-prober.changes +++ b/os-prober.changes @@ -1,3 +1,12 @@ +------------------------------------------------------------------- +Wed Dec 18 04:16:03 UTC 2013 - mchang@suse.com + +- add os-prober-fix-btrfs-subvol-mounted-tests.patch + * move btrfs subvolume mounted tests after regualr rootfs tree + tests to make sure that root and subvolume fs tree are tested. + * the test order is just a preference, assuming that distribution + are installed to root fs tree more likely than to a subvolume. + ------------------------------------------------------------------- Fri Dec 6 09:21:55 UTC 2013 - mchang@suse.com diff --git a/os-prober.spec b/os-prober.spec index b0423dc..0e4eaac 100644 --- a/os-prober.spec +++ b/os-prober.spec @@ -49,6 +49,8 @@ Patch10: os-prober-EFI-openSUSEfy.patch Patch11: os-prober-accept-ESP-on-IMSM.patch # PATCH-FIX-OPENSUSE: don't modprobe all file system modules and don't test mount on unknown partition (bnc#851722) Patch12: os-prober-dont-load-all-fs-module-and-dont-test-mount.patch +# PATCH-FIX-OPENSUSE: fix os-prober entries for distro on btrfs root-fs not created (bnc#846003) +Patch13: os-prober-fix-btrfs-subvol-mounted-tests.patch Requires: /bin/grep Requires: /bin/sed @@ -79,6 +81,7 @@ cp %SOURCE1 . %patch10 -p1 %patch11 -p1 %patch12 -p1 +%patch13 -p1 %build make %{?_smp_mflags} CC="%__cc" CFLAGS="%{optflags}"