Backend: refactor mount_all and umount_all

- only umount /metadata and /persist if not already mounted, as some recoveries have these always mounted
- combine into list of possibly pre-mounted partitions to umount
This commit is contained in:
osm0sis committed 2023-04-22 08:18:14 -03:00
1 parent c45a8d52c0
commit f080b80e30
2 files changed
+17 -30

No files matched your search

+16 -29
View File
@@ -119,23 +119,23 @@ umount_apex() {
mount_all() { mount_all() {
local byname mount slot system; local byname mount slot system;
echo "Mounting..." >&2; echo "Mounting..." >&2;
if ! is_mounted /cache; then byname=bootdevice/by-name;
$BB mount /cache 2>/dev/null && echo "/cache" >&2 && UMOUNT_CACHE=1; [ -d /dev/block/$byname ] || byname=$($BB find /dev/block/platform -type d -name by-name 2>/dev/null | $BB head -n1 | $BB cut -d/ -f4-);
fi; [ -e /dev/block/$byname/super -a -d /dev/block/mapper ] && byname=mapper;
if ! is_mounted /data; then [ -e /dev/block/$byname/system ] || slot=$(find_slot);
$BB mount /data && echo "/data" >&2 && UMOUNT_DATA=1; for mount in /cache /data /metadata /persist; do
fi; if ! is_mounted $mount; then
for mount in /vendor /product /system_ext /metadata /persist; do $BB mount $mount 2>/dev/null && echo "$mount (fstab)" >&2 && UMOUNTLIST="$UMOUNTLIST $mount";
$BB mount -o ro -t auto $mount 2>/dev/null && echo "$mount (fstab)" >&2; if [ $? != 0 -a -e /dev/block/$byname$mount ]; then
setup_mountpoint $mount;
$BB mount -o ro -t auto /dev/block/$byname$mount $mount && echo "$mount (direct)" >&2 && UMOUNTLIST="$UMOUNTLIST $mount";
fi;
fi;
done; done;
setup_mountpoint $ANDROID_ROOT; setup_mountpoint $ANDROID_ROOT;
if ! is_mounted $ANDROID_ROOT; then if ! is_mounted $ANDROID_ROOT; then
$BB mount -o ro -t auto $ANDROID_ROOT 2>/dev/null && echo "$ANDROID_ROOT (\$ANDROID_ROOT)" >&2; $BB mount -o ro -t auto $ANDROID_ROOT 2>/dev/null && echo "$ANDROID_ROOT (\$ANDROID_ROOT)" >&2;
fi; fi;
byname=bootdevice/by-name;
[ -d /dev/block/$byname ] || byname=$($BB find /dev/block/platform -type d -name by-name 2>/dev/null | $BB head -n1 | $BB cut -d/ -f4-);
[ -e /dev/block/$byname/super ] && [ -d /dev/block/mapper ] && byname=mapper;
[ -e /dev/block/$byname/system ] || slot=$(find_slot);
case $ANDROID_ROOT in case $ANDROID_ROOT in
/system_root) setup_mountpoint /system;; /system_root) setup_mountpoint /system;;
/system) /system)
@@ -155,7 +155,8 @@ mount_all() {
esac; esac;
[ -f /system_root/system/build.prop ] && system=/system; [ -f /system_root/system/build.prop ] && system=/system;
for mount in /vendor /product /system_ext; do for mount in /vendor /product /system_ext; do
if ! is_mounted $mount && [ -L /system$mount -o -L /system_root$system$mount ]; then $BB mount -o ro -t auto $mount 2>/dev/null && echo "$mount (fstab)" >&2;
if [ $? != 0 ] && [ -L /system$mount -o -L /system_root$system$mount ]; then
setup_mountpoint $mount; setup_mountpoint $mount;
$BB mount -o ro -t auto /dev/block/$byname$mount$slot $mount && echo "$mount (direct)" >&2; $BB mount -o ro -t auto /dev/block/$byname$mount$slot $mount && echo "$mount (direct)" >&2;
fi; fi;
@@ -164,12 +165,6 @@ mount_all() {
mount_apex; mount_apex;
$BB mount -o bind /system_root$system /system && echo "/system (bind)" >&2; $BB mount -o bind /system_root$system /system && echo "/system (bind)" >&2;
fi; fi;
for mount in /metadata /persist; do
if ! is_mounted $mount && [ -e /dev/block/bootdevice/by-name$mount ]; then
setup_mountpoint $mount;
$BB mount -o ro -t auto /dev/block/bootdevice/by-name$mount $mount && echo "$mount (direct)" >&2;
fi;
done;
echo " " >&2; echo " " >&2;
} }
umount_all() { umount_all() {
@@ -186,18 +181,10 @@ umount_all() {
fi; fi;
umount /vendor; # busybox umount /vendor breaks recovery on some hacky devices umount /vendor; # busybox umount /vendor breaks recovery on some hacky devices
umount -l /vendor; umount -l /vendor;
for mount in /mnt/system /mnt/vendor /product /mnt/product /system_ext /mnt/system_ext /metadata /persist; do for mount in /mnt/system /mnt/vendor /product /mnt/product /system_ext /mnt/system_ext $UMOUNTLIST; do
$BB umount $mount; $BB umount $mount;
$BB umount -l $mount; $BB umount -l $mount;
done; done) 2>/dev/null;
if [ "$UMOUNT_DATA" ]; then
$BB umount /data;
$BB umount -l /data;
fi;
if [ "$UMOUNT_CACHE" ]; then
$BB umount /cache;
$BB umount -l /cache;
fi) 2>/dev/null;
} }
setup_env() { setup_env() {
$BOOTMODE && return 1; $BOOTMODE && return 1;
+1 -1
View File
@@ -3,4 +3,4 @@
# Dummy file; update-binary is a shell script (DO NOT CHANGE) # Dummy file; update-binary is a shell script (DO NOT CHANGE)
# #
# #
# AK_BASE_VERSION=20230421 # AK_BASE_VERSION=20230422