Loading fs_mgr/libsnapshot/include/libsnapshot/snapshot.h +4 −0 Original line number Diff line number Diff line Loading @@ -540,6 +540,10 @@ class SnapshotManager final { bool ProcessUpdateStateOnDataWipe(bool allow_forward_merge, const std::function<bool()>& callback); // Return device string of a mapped image, or if it is not available, the mapped image path. bool GetMappedImageDeviceStringOrPath(const std::string& device_name, std::string* device_string_or_mapped_path); std::string gsid_dir_; std::string metadata_dir_; std::unique_ptr<IDeviceInfo> device_; Loading fs_mgr/libsnapshot/snapshot.cpp +22 −4 Original line number Diff line number Diff line Loading @@ -1691,7 +1691,7 @@ bool SnapshotManager::MapPartitionWithSnapshot(LockedFile* lock, return false; } std::string cow_device; if (!dm.GetDeviceString(cow_name, &cow_device)) { if (!GetMappedImageDeviceStringOrPath(cow_name, &cow_device)) { LOG(ERROR) << "Could not determine major/minor for: " << cow_name; return false; } Loading Loading @@ -1788,7 +1788,7 @@ bool SnapshotManager::MapCowDevices(LockedFile* lock, const CreateLogicalPartiti // If the COW image exists, append it as the last extent. if (snapshot_status.cow_file_size() > 0) { std::string cow_image_device; if (!dm.GetDeviceString(cow_image_name, &cow_image_device)) { if (!GetMappedImageDeviceStringOrPath(cow_image_name, &cow_image_device)) { LOG(ERROR) << "Cannot determine major/minor for: " << cow_image_name; return false; } Loading Loading @@ -2364,7 +2364,6 @@ Return SnapshotManager::InitializeUpdateSnapshots( const std::map<std::string, SnapshotStatus>& all_snapshot_status) { CHECK(lock); auto& dm = DeviceMapper::Instance(); CreateLogicalPartitionParams cow_params{ .block_device = LP_METADATA_DEFAULT_PARTITION_NAME, .metadata = exported_target_metadata, Loading @@ -2389,7 +2388,7 @@ Return SnapshotManager::InitializeUpdateSnapshots( } std::string cow_path; if (!dm.GetDmDevicePathByName(cow_name, &cow_path)) { if (!images_->GetMappedImageDevice(cow_name, &cow_path)) { LOG(ERROR) << "Cannot determine path for " << cow_name; return Return::Error(); } Loading Loading @@ -2738,5 +2737,24 @@ bool SnapshotManager::UpdateForwardMergeIndicator(bool wipe) { return true; } bool SnapshotManager::GetMappedImageDeviceStringOrPath(const std::string& device_name, std::string* device_string_or_mapped_path) { auto& dm = DeviceMapper::Instance(); // Try getting the device string if it is a device mapper device. if (dm.GetState(device_name) != DmDeviceState::INVALID) { return dm.GetDeviceString(device_name, device_string_or_mapped_path); } // Otherwise, get path from IImageManager. if (!images_->GetMappedImageDevice(device_name, device_string_or_mapped_path)) { return false; } LOG(WARNING) << "Calling GetMappedImageDevice with local image manager; device " << (device_string_or_mapped_path ? *device_string_or_mapped_path : "(nullptr)") << "may not be available in first stage init! "; return true; } } // namespace snapshot } // namespace android init/reboot.cpp +0 −2 Original line number Diff line number Diff line Loading @@ -66,8 +66,6 @@ #include "sigchld_handler.h" #include "util.h" #define PROC_SYSRQ "/proc/sysrq-trigger" using namespace std::literals; using android::base::boot_clock; Loading init/reboot_utils.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ #include <cutils/android_reboot.h> #include "capabilities.h" #include "reboot_utils.h" namespace android { namespace init { Loading Loading @@ -138,6 +139,9 @@ void __attribute__((noreturn)) InitFatalReboot(int signal_number) { LOG(ERROR) << backtrace->FormatFrameData(i); } if (init_fatal_panic) { LOG(ERROR) << __FUNCTION__ << ": Trigger crash"; android::base::WriteStringToFile("c", PROC_SYSRQ); LOG(ERROR) << __FUNCTION__ << ": Sys-Rq failed to crash the system; fallback to exit()."; _exit(signal_number); } RebootSystem(ANDROID_RB_RESTART2, init_fatal_reboot_target); Loading init/reboot_utils.h +2 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ #include <string> #define PROC_SYSRQ "/proc/sysrq-trigger" namespace android { namespace init { Loading Loading
fs_mgr/libsnapshot/include/libsnapshot/snapshot.h +4 −0 Original line number Diff line number Diff line Loading @@ -540,6 +540,10 @@ class SnapshotManager final { bool ProcessUpdateStateOnDataWipe(bool allow_forward_merge, const std::function<bool()>& callback); // Return device string of a mapped image, or if it is not available, the mapped image path. bool GetMappedImageDeviceStringOrPath(const std::string& device_name, std::string* device_string_or_mapped_path); std::string gsid_dir_; std::string metadata_dir_; std::unique_ptr<IDeviceInfo> device_; Loading
fs_mgr/libsnapshot/snapshot.cpp +22 −4 Original line number Diff line number Diff line Loading @@ -1691,7 +1691,7 @@ bool SnapshotManager::MapPartitionWithSnapshot(LockedFile* lock, return false; } std::string cow_device; if (!dm.GetDeviceString(cow_name, &cow_device)) { if (!GetMappedImageDeviceStringOrPath(cow_name, &cow_device)) { LOG(ERROR) << "Could not determine major/minor for: " << cow_name; return false; } Loading Loading @@ -1788,7 +1788,7 @@ bool SnapshotManager::MapCowDevices(LockedFile* lock, const CreateLogicalPartiti // If the COW image exists, append it as the last extent. if (snapshot_status.cow_file_size() > 0) { std::string cow_image_device; if (!dm.GetDeviceString(cow_image_name, &cow_image_device)) { if (!GetMappedImageDeviceStringOrPath(cow_image_name, &cow_image_device)) { LOG(ERROR) << "Cannot determine major/minor for: " << cow_image_name; return false; } Loading Loading @@ -2364,7 +2364,6 @@ Return SnapshotManager::InitializeUpdateSnapshots( const std::map<std::string, SnapshotStatus>& all_snapshot_status) { CHECK(lock); auto& dm = DeviceMapper::Instance(); CreateLogicalPartitionParams cow_params{ .block_device = LP_METADATA_DEFAULT_PARTITION_NAME, .metadata = exported_target_metadata, Loading @@ -2389,7 +2388,7 @@ Return SnapshotManager::InitializeUpdateSnapshots( } std::string cow_path; if (!dm.GetDmDevicePathByName(cow_name, &cow_path)) { if (!images_->GetMappedImageDevice(cow_name, &cow_path)) { LOG(ERROR) << "Cannot determine path for " << cow_name; return Return::Error(); } Loading Loading @@ -2738,5 +2737,24 @@ bool SnapshotManager::UpdateForwardMergeIndicator(bool wipe) { return true; } bool SnapshotManager::GetMappedImageDeviceStringOrPath(const std::string& device_name, std::string* device_string_or_mapped_path) { auto& dm = DeviceMapper::Instance(); // Try getting the device string if it is a device mapper device. if (dm.GetState(device_name) != DmDeviceState::INVALID) { return dm.GetDeviceString(device_name, device_string_or_mapped_path); } // Otherwise, get path from IImageManager. if (!images_->GetMappedImageDevice(device_name, device_string_or_mapped_path)) { return false; } LOG(WARNING) << "Calling GetMappedImageDevice with local image manager; device " << (device_string_or_mapped_path ? *device_string_or_mapped_path : "(nullptr)") << "may not be available in first stage init! "; return true; } } // namespace snapshot } // namespace android
init/reboot.cpp +0 −2 Original line number Diff line number Diff line Loading @@ -66,8 +66,6 @@ #include "sigchld_handler.h" #include "util.h" #define PROC_SYSRQ "/proc/sysrq-trigger" using namespace std::literals; using android::base::boot_clock; Loading
init/reboot_utils.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ #include <cutils/android_reboot.h> #include "capabilities.h" #include "reboot_utils.h" namespace android { namespace init { Loading Loading @@ -138,6 +139,9 @@ void __attribute__((noreturn)) InitFatalReboot(int signal_number) { LOG(ERROR) << backtrace->FormatFrameData(i); } if (init_fatal_panic) { LOG(ERROR) << __FUNCTION__ << ": Trigger crash"; android::base::WriteStringToFile("c", PROC_SYSRQ); LOG(ERROR) << __FUNCTION__ << ": Sys-Rq failed to crash the system; fallback to exit()."; _exit(signal_number); } RebootSystem(ANDROID_RB_RESTART2, init_fatal_reboot_target); Loading
init/reboot_utils.h +2 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ #include <string> #define PROC_SYSRQ "/proc/sysrq-trigger" namespace android { namespace init { Loading