Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4244115e authored by Mark Salyzyn's avatar Mark Salyzyn Committed by android-build-merger
Browse files

Merge "fs_mgr: overlay backing, force filesystem for f2fs"

am: 3b554d3d

Change-Id: I10c369c1e1aa159e94863ea22c73c05d542e9b8b
parents 5257dc52 3b554d3d
Loading
Loading
Loading
Loading
+15 −6
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <linux/fs.h>
#include <selinux/selinux.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/mount.h>
#include <sys/param.h>
@@ -692,13 +693,21 @@ bool fs_mgr_overlayfs_setup_scratch(const fstab* fstab, bool* change) {
        errno = 0;
    }

    auto ret = system((mnt_type == "f2fs")
                              ? ((kMkF2fs + " -d1 " + scratch_device).c_str())
                              : ((kMkExt4 + " -b 4096 -t ext4 -m 0 -M " + kScratchMountPoint +
                                  " -O has_journal " + scratch_device)
                                         .c_str()));
    // Force mkfs by design for overlay support of adb remount, simplify and
    // thus do not rely on fsck to correct problems that could creep in.
    auto command = ""s;
    if (mnt_type == "f2fs") {
        command = kMkF2fs + " -w 4096 -f -d1 -l" + android::base::Basename(kScratchMountPoint);
    } else if (mnt_type == "ext4") {
        command = kMkExt4 + " -b 4096 -t ext4 -m 0 -O has_journal -M " + kScratchMountPoint;
    } else {
        LERROR << mnt_type << " has no mkfs cookbook";
        return false;
    }
    command += " " + scratch_device;
    auto ret = system(command.c_str());
    if (ret) {
        LERROR << "make " << mnt_type << " filesystem on " << scratch_device << " error=" << ret;
        LERROR << "make " << mnt_type << " filesystem on " << scratch_device << " return=" << ret;
        return false;
    }

+67 −23
Original line number Diff line number Diff line
@@ -198,39 +198,80 @@ isDebuggable || die "device not a debug build"

# Do something
adb_wait || die "wait for device failed"
adb_sh ls -d /sys/module/overlay </dev/null || die "overlay module not present"
adb_su ls /sys/module/overlay/parameters/override_creds </dev/null ||
adb_sh ls -d /sys/module/overlay </dev/null >/dev/null &&
  echo "${GREEN}[       OK ]${NORMAL} overlay module present" >&2 ||
  die "overlay module not present"
adb_su ls /sys/module/overlay/parameters/override_creds </dev/null >/dev/null &&
  echo "${GREEN}[       OK ]${NORMAL} overlay module supports override_creds" >&2 ||
  die "overlay module can not be used on ANDROID"
adb_root &&
  adb_wait &&
  adb_wait ||
  die "initial setup"
reboot=false
OVERLAYFS_BACKING="cache mnt/scratch"
for d in ${OVERLAYFS_BACKING}; do
  if adb_sh ls -d /${d}/overlay </dev/null >/dev/null 2>&1; then
    echo "${ORANGE}[  WARNING ]${NORMAL} /${d}/overlay is setup, wiping" >&2
    adb_sh rm -rf /${d}/overlay </dev/null ||
      die "/${d}/overlay wipe"
    reboot=true
  fi
done
if ${reboot}; then
  echo "${ORANGE}[  WARNING ]${NORMAL} rebooting before test" >&2
  adb_reboot &&
    adb_wait 2m &&
    adb_root &&
    adb_wait ||
    die "reboot after wipe"
fi
D=`adb_sh df -k </dev/null` &&
  H=`echo "${D}" | head -1` &&
  D=`echo "${D}" | grep "^overlay "` &&
  echo "${H}" &&
  echo "${D}" &&
  echo "${ORANGE}[  WARNING ]${NORMAL} overlays present before setup" >&2 ||
  echo "${GREEN}[       OK ]${NORMAL} no overlay present before setup" >&2

D=`adb disable-verity 2>&1` ||
    die "setup for overlay"
  die "setup for overlay ${D}"
echo "${D}"
if [ X"${D}" != X"${D##*using overlayfs}" ]; then
  echo "${GREEN}[       OK ]${NORMAL} using overlayfs" >&2
fi
if adb_sh ls -d /data/overlay </dev/null >/dev/null 2>&1; then
  echo "/data/overlay setup, clearing out" >&2
  adb_sh rm -rf /data/overlay </dev/null ||
    die "/data/overlay removal"
fi
adb_sh ls -d /cache/overlay </dev/null >/dev/null 2>&1 ||
  adb_sh ls -d /mnt/scratch/overlay </dev/null >/dev/null 2>&1 ||
  die "overlay directory setup"
adb_reboot &&
  adb_wait &&
  adb_sh df -k </dev/null | head -1 &&
  adb_sh df -k </dev/null | grep "^overlay " ||
  D=`adb_sh df -k </dev/null` &&
  H=`echo "${D}" | head -1` &&
  D=`echo "${D}" | grep "^overlay "` &&
  echo "${H}" &&
  echo "${D}" ||
  die "overlay takeover failed"
adb_sh df -k </dev/null | grep "^overlay .* /system\$" >/dev/null ||
echo "${D}" | grep "^overlay .* /system\$" >/dev/null ||
  echo "${ORANGE}[  WARNING ]${NORMAL} overlay takeover before remount not complete" >&2

adb_root &&
  adb_wait &&
  adb remount &&
  adb_sh df -k </dev/null | head -1 &&
  adb_sh df -k </dev/null | grep "^overlay " &&
  adb_sh df -k </dev/null | grep "^overlay .* /system\$" >/dev/null ||
  D=`adb_sh df -k </dev/null` ||
  die "can not collect filesystem data"
if echo "${D}" | grep " /mnt/scratch" >/dev/null; then
  echo "${ORANGE}[     INFO ]${NORMAL} using scratch dynamic partition for overrides" >&2
  H=`adb_sh cat /proc/mounts | sed -n 's@\([^ ]*\) /mnt/scratch \([^ ]*\) .*@\2 on \1@p'`
  [ -n "${H}" ] &&
    echo "${ORANGE}[     INFO ]${NORMAL} scratch filesystem ${H}"
fi
for d in ${OVERLAYFS_BACKING}; do
  if adb_sh ls -d /${d}/overlay/system/upper </dev/null >/dev/null 2>&1; then
    echo "${ORANGE}[     INFO ]${NORMAL} /${d}/overlay is setup" >&2
  fi
done

H=`echo "${D}" | head -1` &&
  D=`echo "${D}" | grep "^overlay "` &&
  echo "${H}" &&
  echo "${D}" &&
  echo "${D}" | grep "^overlay .* /system\$" >/dev/null ||
  die  "overlay takeover after remount"
!(adb_sh grep "^overlay " /proc/mounts </dev/null | grep " overlay ro,") &&
  !(adb_sh grep " rw," /proc/mounts </dev/null |
@@ -275,11 +316,14 @@ adb reboot-fastboot &&
adb_wait &&
  adb_root &&
  adb_wait &&
  adb_sh df -k </dev/null | head -1 &&
  adb_sh df -k </dev/null | grep "^overlay " &&
  adb_sh df -k </dev/null | grep "^overlay .* /system\$" >/dev/null ||
  D=`adb_sh df -k </dev/null` &&
  H=`echo "${D}" | head -1` &&
  D=`echo "${D}" | grep "^overlay "` &&
  echo "${H}" &&
  echo "${D}" &&
  echo "${D}" | grep "^overlay .* /system\$" >/dev/null ||
  die  "overlay system takeover after flash vendor"
adb_sh df -k </dev/null | grep "^overlay .* /vendor\$" >/dev/null &&
echo "${D}" | grep "^overlay .* /vendor\$" >/dev/null &&
  die  "overlay minus vendor takeover after flash vendor"
B="`adb_cat /system/hello`" ||
  die "re-read system hello after flash vendor"