Loading fs_mgr/fs_mgr.cpp +82 −0 Original line number Diff line number Diff line Loading @@ -2023,6 +2023,84 @@ static bool PrepareZramBackingDevice(off64_t size) { return InstallZramDevice(loop_device); } // Check whether it is in recovery mode or not. // // This is a copy from util.h in libinit. // // You need to check ALL relevant executables calling this function has access to // "/system/bin/recovery" (including SELinux permissions and UNIX permissions). static bool IsRecovery() { return access("/system/bin/recovery", F_OK) == 0; } // Decides whether swapon_all should skip setting up zram. // // swapon_all is deprecated to setup zram after mmd is launched. swapon_all command should skip // setting up zram if mmd is enabled by AConfig flag and mmd is configured to set up zram. static bool ShouldSkipZramSetup() { if (IsRecovery()) { // swapon_all continue to support zram setup in recovery mode after mmd launch. return false; } // Since AConfig does not support to load the status from init, we use the system property // "mmd.enabled_aconfig" copied from AConfig by `mmd --set-property` command to check whether // mmd is enabled or not. // // aconfig_prop can have either of: // // * "true": mmd is enabled by AConfig // * "false": mmd is disabled by AConfig // * "": swapon_all is executed before `mmd --set-property` // // During mmd being launched, we request OEMs, who decided to use mmd to set up zram, to execute // swapon_all after "mmd.enabled_aconfig" system property is initialized. Init can wait the // "mmd.enabled_aconfig" initialization by `property:mmd.enabled_aconfig=*` trigger. // // After mmd is launched, we deprecate swapon_all command for setting up zram but recommend to // use `mmd --setup-zram`. It means that the system should call swapon_all with fstab with no // zram entry or the system should never call swapon_all. // // As a transition, OEMs can use the deprecated swapon_all to set up zram for several versions // after mmd is launched. swapon_all command will show warning logs during the transition // period. const std::string aconfig_prop = android::base::GetProperty("mmd.enabled_aconfig", ""); const bool is_zram_managed_by_mmd = android::base::GetBoolProperty("mmd.zram.enabled", false); if (aconfig_prop == "true" && is_zram_managed_by_mmd) { // Skip zram setup since zram is managed by mmd. // // We expect swapon_all is not called when mmd is enabled by AConfig flag. // TODO: b/394484720 - Make this log as warning after mmd is launched. LINFO << "Skip setting up zram because mmd sets up zram instead."; return true; } if (aconfig_prop == "false") { // It is expected to swapon_all command to set up zram before mmd is launched. LOG(DEBUG) << "mmd is not launched yet. swapon_all setup zram."; } else if (is_zram_managed_by_mmd) { // This branch is for aconfig_prop == "" // On the system which uses mmd to setup zram, swapon_all must be executed after // mmd.enabled_aconfig is initialized. LERROR << "swapon_all must be called after mmd.enabled_aconfig system " "property is initialized"; // Since we don't know whether mmd is enabled on the system or not, we fall back to enable // zram from swapon_all conservatively. Both swapon_all and `mmd --setup-zram` command // trying to set up zram does not break the system but just either ends up failing. } else { // We show the warning log for swapon_all deprecation on both aconfig_prop is "true" and "" // cases. // If mmd is enabled, swapon_all is already deprecated. // If aconfig_prop is "", we don't know whether mmd is launched or not. But we show the // deprecation warning log conservatively. LWARNING << "mmd is recommended to set up zram over swapon_all command with " "fstab entry."; } return false; } bool fs_mgr_swapon_all(const Fstab& fstab) { bool ret = true; for (const auto& entry : fstab) { Loading @@ -2032,6 +2110,10 @@ bool fs_mgr_swapon_all(const Fstab& fstab) { } if (entry.zram_size > 0) { if (ShouldSkipZramSetup()) { continue; } if (!PrepareZramBackingDevice(entry.zram_backingdev_size)) { LERROR << "Failure of zram backing device file for '" << entry.blk_device << "'"; } Loading init/README.md +10 −0 Original line number Diff line number Diff line Loading @@ -785,6 +785,16 @@ provides the `aidl_lazy_test_1` interface. fstab.${ro.hardware} or fstab.${ro.hardware.platform} will be scanned for under /odm/etc, /vendor/etc, or / at runtime, in that order. > swapon_all is deprecated and will do nothing if `mmd_enabled` AConfig flag in `system_performance` namespace and `mmd.zram.enabled` sysprop are enabled. OEMs, who decided to use mmd to manage zram, must remove zram entry from fstab or remove swapon_all call from their init script. > swapon_all continues to support setting up non-zram swap devices. > swapon_all on recovery mode continues to support setting up zram because mmd does not support the recovery mode. `swapoff <path>` > Stops swapping to the file or block device specified by path. Loading Loading
fs_mgr/fs_mgr.cpp +82 −0 Original line number Diff line number Diff line Loading @@ -2023,6 +2023,84 @@ static bool PrepareZramBackingDevice(off64_t size) { return InstallZramDevice(loop_device); } // Check whether it is in recovery mode or not. // // This is a copy from util.h in libinit. // // You need to check ALL relevant executables calling this function has access to // "/system/bin/recovery" (including SELinux permissions and UNIX permissions). static bool IsRecovery() { return access("/system/bin/recovery", F_OK) == 0; } // Decides whether swapon_all should skip setting up zram. // // swapon_all is deprecated to setup zram after mmd is launched. swapon_all command should skip // setting up zram if mmd is enabled by AConfig flag and mmd is configured to set up zram. static bool ShouldSkipZramSetup() { if (IsRecovery()) { // swapon_all continue to support zram setup in recovery mode after mmd launch. return false; } // Since AConfig does not support to load the status from init, we use the system property // "mmd.enabled_aconfig" copied from AConfig by `mmd --set-property` command to check whether // mmd is enabled or not. // // aconfig_prop can have either of: // // * "true": mmd is enabled by AConfig // * "false": mmd is disabled by AConfig // * "": swapon_all is executed before `mmd --set-property` // // During mmd being launched, we request OEMs, who decided to use mmd to set up zram, to execute // swapon_all after "mmd.enabled_aconfig" system property is initialized. Init can wait the // "mmd.enabled_aconfig" initialization by `property:mmd.enabled_aconfig=*` trigger. // // After mmd is launched, we deprecate swapon_all command for setting up zram but recommend to // use `mmd --setup-zram`. It means that the system should call swapon_all with fstab with no // zram entry or the system should never call swapon_all. // // As a transition, OEMs can use the deprecated swapon_all to set up zram for several versions // after mmd is launched. swapon_all command will show warning logs during the transition // period. const std::string aconfig_prop = android::base::GetProperty("mmd.enabled_aconfig", ""); const bool is_zram_managed_by_mmd = android::base::GetBoolProperty("mmd.zram.enabled", false); if (aconfig_prop == "true" && is_zram_managed_by_mmd) { // Skip zram setup since zram is managed by mmd. // // We expect swapon_all is not called when mmd is enabled by AConfig flag. // TODO: b/394484720 - Make this log as warning after mmd is launched. LINFO << "Skip setting up zram because mmd sets up zram instead."; return true; } if (aconfig_prop == "false") { // It is expected to swapon_all command to set up zram before mmd is launched. LOG(DEBUG) << "mmd is not launched yet. swapon_all setup zram."; } else if (is_zram_managed_by_mmd) { // This branch is for aconfig_prop == "" // On the system which uses mmd to setup zram, swapon_all must be executed after // mmd.enabled_aconfig is initialized. LERROR << "swapon_all must be called after mmd.enabled_aconfig system " "property is initialized"; // Since we don't know whether mmd is enabled on the system or not, we fall back to enable // zram from swapon_all conservatively. Both swapon_all and `mmd --setup-zram` command // trying to set up zram does not break the system but just either ends up failing. } else { // We show the warning log for swapon_all deprecation on both aconfig_prop is "true" and "" // cases. // If mmd is enabled, swapon_all is already deprecated. // If aconfig_prop is "", we don't know whether mmd is launched or not. But we show the // deprecation warning log conservatively. LWARNING << "mmd is recommended to set up zram over swapon_all command with " "fstab entry."; } return false; } bool fs_mgr_swapon_all(const Fstab& fstab) { bool ret = true; for (const auto& entry : fstab) { Loading @@ -2032,6 +2110,10 @@ bool fs_mgr_swapon_all(const Fstab& fstab) { } if (entry.zram_size > 0) { if (ShouldSkipZramSetup()) { continue; } if (!PrepareZramBackingDevice(entry.zram_backingdev_size)) { LERROR << "Failure of zram backing device file for '" << entry.blk_device << "'"; } Loading
init/README.md +10 −0 Original line number Diff line number Diff line Loading @@ -785,6 +785,16 @@ provides the `aidl_lazy_test_1` interface. fstab.${ro.hardware} or fstab.${ro.hardware.platform} will be scanned for under /odm/etc, /vendor/etc, or / at runtime, in that order. > swapon_all is deprecated and will do nothing if `mmd_enabled` AConfig flag in `system_performance` namespace and `mmd.zram.enabled` sysprop are enabled. OEMs, who decided to use mmd to manage zram, must remove zram entry from fstab or remove swapon_all call from their init script. > swapon_all continues to support setting up non-zram swap devices. > swapon_all on recovery mode continues to support setting up zram because mmd does not support the recovery mode. `swapoff <path>` > Stops swapping to the file or block device specified by path. Loading