Merge "init: -1 log for control message error paths."
diff --git a/fastboot/fastboot.cpp b/fastboot/fastboot.cpp
index 8923f40..5bd37e1 100644
--- a/fastboot/fastboot.cpp
+++ b/fastboot/fastboot.cpp
@@ -160,6 +160,10 @@
"vbmeta_system",
true, ImageType::BootCritical },
{ "vendor", "vendor.img", "vendor.sig", "vendor", true, ImageType::Normal },
+ { "vendor_boot",
+ "vendor_boot.img", "vendor_boot.sig",
+ "vendor_boot",
+ true, ImageType::BootCritical },
{ nullptr, "vendor_other.img", "vendor.sig", "vendor", true, ImageType::Normal },
// clang-format on
};
diff --git a/fs_mgr/fs_mgr_dm_linear.cpp b/fs_mgr/fs_mgr_dm_linear.cpp
index 1166062..ea799ce 100644
--- a/fs_mgr/fs_mgr_dm_linear.cpp
+++ b/fs_mgr/fs_mgr_dm_linear.cpp
@@ -154,61 +154,77 @@
return true;
}
-bool CreateLogicalPartition(const CreateLogicalPartitionParams& params, std::string* path) {
- const LpMetadata* metadata = params.metadata;
+bool CreateLogicalPartitionParams::InitDefaults(CreateLogicalPartitionParams::OwnedData* owned) {
+ if (block_device.empty()) {
+ LOG(ERROR) << "block_device is required for CreateLogicalPartition";
+ return false;
+ }
// Read metadata if needed.
- std::unique_ptr<LpMetadata> local_metadata;
if (!metadata) {
- if (!params.metadata_slot) {
+ if (!metadata_slot) {
LOG(ERROR) << "Either metadata or a metadata slot must be specified.";
return false;
}
- auto slot = *params.metadata_slot;
- if (local_metadata = ReadMetadata(params.block_device, slot); !local_metadata) {
- LOG(ERROR) << "Could not read partition table for: " << params.block_device;
+ auto slot = *metadata_slot;
+ if (owned->metadata = ReadMetadata(block_device, slot); !owned->metadata) {
+ LOG(ERROR) << "Could not read partition table for: " << block_device;
return false;
}
- metadata = local_metadata.get();
+ metadata = owned->metadata.get();
}
// Find the partition by name if needed.
- const LpMetadataPartition* partition = params.partition;
if (!partition) {
- for (const auto& iter : metadata->partitions) {
- if (GetPartitionName(iter) == params.partition_name) {
- partition = &iter;
+ for (const auto& metadata_partition : metadata->partitions) {
+ if (android::fs_mgr::GetPartitionName(metadata_partition) == partition_name) {
+ partition = &metadata_partition;
break;
}
}
- if (!partition) {
- LERROR << "Could not find any partition with name: " << params.partition_name;
- return false;
- }
+ }
+ if (!partition) {
+ LERROR << "Could not find any partition with name: " << partition_name;
+ return false;
+ }
+ if (partition_name.empty()) {
+ partition_name = android::fs_mgr::GetPartitionName(*partition);
+ } else if (partition_name != android::fs_mgr::GetPartitionName(*partition)) {
+ LERROR << "Inconsistent partition_name " << partition_name << " with partition "
+ << android::fs_mgr::GetPartitionName(*partition);
+ return false;
}
- PartitionOpener default_opener;
- const IPartitionOpener* opener =
- params.partition_opener ? params.partition_opener : &default_opener;
+ if (!partition_opener) {
+ owned->partition_opener = std::make_unique<PartitionOpener>();
+ partition_opener = owned->partition_opener.get();
+ }
+
+ if (device_name.empty()) {
+ device_name = partition_name;
+ }
+
+ return true;
+}
+
+bool CreateLogicalPartition(CreateLogicalPartitionParams params, std::string* path) {
+ CreateLogicalPartitionParams::OwnedData owned_data;
+ if (!params.InitDefaults(&owned_data)) return false;
DmTable table;
- if (!CreateDmTable(*opener, *metadata, *partition, params.block_device, &table)) {
+ if (!CreateDmTable(*params.partition_opener, *params.metadata, *params.partition,
+ params.block_device, &table)) {
return false;
}
if (params.force_writable) {
table.set_readonly(false);
}
- std::string device_name = params.device_name;
- if (device_name.empty()) {
- device_name = GetPartitionName(*partition);
- }
-
DeviceMapper& dm = DeviceMapper::Instance();
- if (!dm.CreateDevice(device_name, table, path, params.timeout_ms)) {
+ if (!dm.CreateDevice(params.device_name, table, path, params.timeout_ms)) {
return false;
}
- LINFO << "Created logical partition " << device_name << " on device " << *path;
+ LINFO << "Created logical partition " << params.device_name << " on device " << *path;
return true;
}
diff --git a/fs_mgr/fs_mgr_overlayfs.cpp b/fs_mgr/fs_mgr_overlayfs.cpp
index d7ea81d..358c980 100644
--- a/fs_mgr/fs_mgr_overlayfs.cpp
+++ b/fs_mgr/fs_mgr_overlayfs.cpp
@@ -713,7 +713,7 @@
}
report = report + ")=";
- auto ret = mount("overlay", mount_point.c_str(), "overlay", MS_RDONLY | MS_RELATIME,
+ auto ret = mount("overlay", mount_point.c_str(), "overlay", MS_RDONLY | MS_NOATIME,
options.c_str());
if (ret) {
retval = false;
@@ -776,7 +776,7 @@
entry.fs_type = mnt_type;
if ((mnt_type == "f2fs") && !f2fs) entry.fs_type = "ext4";
if ((mnt_type == "ext4") && !ext4) entry.fs_type = "f2fs";
- entry.flags = MS_RELATIME;
+ entry.flags = MS_NOATIME;
if (readonly) {
entry.flags |= MS_RDONLY;
} else {
diff --git a/fs_mgr/include/fs_mgr_dm_linear.h b/fs_mgr/include/fs_mgr_dm_linear.h
index 2c54755..a912208 100644
--- a/fs_mgr/include/fs_mgr_dm_linear.h
+++ b/fs_mgr/include/fs_mgr_dm_linear.h
@@ -81,9 +81,24 @@
// Helpers for determining the effective partition and device name.
std::string GetPartitionName() const;
std::string GetDeviceName() const;
+
+ // Specify ownership of fields. The ownership of these fields are managed
+ // by the caller of InitDefaults().
+ // These are not declared in CreateLogicalPartitionParams so that the
+ // copy constructor is not deleted.
+ struct OwnedData {
+ std::unique_ptr<LpMetadata> metadata;
+ std::unique_ptr<IPartitionOpener> partition_opener;
+ };
+
+ // Fill in default values for |params| that CreateLogicalPartition assumes. Caller does
+ // not need to call this before calling CreateLogicalPartition; CreateLogicalPartition sets
+ // values when they are missing.
+ // Caller is responsible for destroying owned_data when |this| is not used.
+ bool InitDefaults(OwnedData* owned);
};
-bool CreateLogicalPartition(const CreateLogicalPartitionParams& params, std::string* path);
+bool CreateLogicalPartition(CreateLogicalPartitionParams params, std::string* path);
// Destroy the block device for a logical partition, by name. If |timeout_ms|
// is non-zero, then this will block until the device path has been unlinked.
diff --git a/fs_mgr/liblp/builder.cpp b/fs_mgr/liblp/builder.cpp
index 8a74745..c91fbe4 100644
--- a/fs_mgr/liblp/builder.cpp
+++ b/fs_mgr/liblp/builder.cpp
@@ -45,7 +45,7 @@
return true;
}
-Partition::Partition(const std::string& name, const std::string& group_name, uint32_t attributes)
+Partition::Partition(std::string_view name, std::string_view group_name, uint32_t attributes)
: name_(name), group_name_(group_name), attributes_(attributes), size_(0) {}
void Partition::AddExtent(std::unique_ptr<Extent>&& extent) {
@@ -436,10 +436,10 @@
}
Partition* MetadataBuilder::AddPartition(const std::string& name, uint32_t attributes) {
- return AddPartition(name, std::string(kDefaultGroup), attributes);
+ return AddPartition(name, kDefaultGroup, attributes);
}
-Partition* MetadataBuilder::AddPartition(const std::string& name, const std::string& group_name,
+Partition* MetadataBuilder::AddPartition(std::string_view name, std::string_view group_name,
uint32_t attributes) {
if (name.empty()) {
LERROR << "Partition must have a non-empty name.";
@@ -457,7 +457,7 @@
return partitions_.back().get();
}
-Partition* MetadataBuilder::FindPartition(const std::string& name) {
+Partition* MetadataBuilder::FindPartition(std::string_view name) {
for (const auto& partition : partitions_) {
if (partition->name() == name) {
return partition.get();
@@ -958,7 +958,7 @@
return names;
}
-void MetadataBuilder::RemoveGroupAndPartitions(const std::string& group_name) {
+void MetadataBuilder::RemoveGroupAndPartitions(std::string_view group_name) {
if (group_name == kDefaultGroup) {
// Cannot remove the default group.
return;
diff --git a/fs_mgr/liblp/include/liblp/builder.h b/fs_mgr/liblp/include/liblp/builder.h
index 5f854c5..e3b591a 100644
--- a/fs_mgr/liblp/include/liblp/builder.h
+++ b/fs_mgr/liblp/include/liblp/builder.h
@@ -108,7 +108,7 @@
friend class MetadataBuilder;
public:
- Partition(const std::string& name, const std::string& group_name, uint32_t attributes);
+ Partition(std::string_view name, std::string_view group_name, uint32_t attributes);
// Add a raw extent.
void AddExtent(std::unique_ptr<Extent>&& extent);
@@ -214,7 +214,7 @@
// Add a partition, returning a handle so it can be sized as needed. If a
// partition with the given name already exists, nullptr is returned.
- Partition* AddPartition(const std::string& name, const std::string& group_name,
+ Partition* AddPartition(std::string_view name, std::string_view group_name,
uint32_t attributes);
// Same as AddPartition above, but uses the default partition group which
@@ -225,7 +225,7 @@
void RemovePartition(const std::string& name);
// Find a partition by name. If no partition is found, nullptr is returned.
- Partition* FindPartition(const std::string& name);
+ Partition* FindPartition(std::string_view name);
// Find a group by name. If no group is found, nullptr is returned.
PartitionGroup* FindGroup(std::string_view name);
@@ -269,7 +269,7 @@
std::vector<std::string> ListGroups() const;
// Remove all partitions belonging to a group, then remove the group.
- void RemoveGroupAndPartitions(const std::string& group_name);
+ void RemoveGroupAndPartitions(std::string_view group_name);
// Set the LP_METADATA_AUTO_SLOT_SUFFIXING flag.
void SetAutoSlotSuffixing();
diff --git a/fs_mgr/tests/adb-remount-test.sh b/fs_mgr/tests/adb-remount-test.sh
index ed6d0e3..7ccaf0e 100755
--- a/fs_mgr/tests/adb-remount-test.sh
+++ b/fs_mgr/tests/adb-remount-test.sh
@@ -1190,6 +1190,11 @@
skip_unrelated_mounts |
grep " overlay ro,") ||
die "remount overlayfs missed a spot (ro)"
+ !(adb_sh grep -v noatime /proc/mounts </dev/null |
+ skip_administrative_mounts data |
+ skip_unrelated_mounts |
+ grep '.') ||
+ die "mounts are not noatime"
D=`adb_sh grep " rw," /proc/mounts </dev/null |
skip_administrative_mounts data`
if echo "${D}" | grep /dev/root >/dev/null; then
diff --git a/rootdir/etc/ld.config.txt b/rootdir/etc/ld.config.txt
index a639592..a603be2 100644
--- a/rootdir/etc/ld.config.txt
+++ b/rootdir/etc/ld.config.txt
@@ -328,7 +328,7 @@
namespace.rs.asan.permitted.paths += /vendor/${LIB}
namespace.rs.asan.permitted.paths += /data
-namespace.rs.links = default,vndk,neuralnetworks
+namespace.rs.links = default,neuralnetworks
namespace.rs.link.default.shared_libs = %LLNDK_LIBRARIES%
namespace.rs.link.default.shared_libs += %SANITIZER_RUNTIME_LIBRARIES%
@@ -336,8 +336,6 @@
# namespace because RS framework libs are using them.
namespace.rs.link.default.shared_libs += %PRIVATE_LLNDK_LIBRARIES%
-namespace.rs.link.vndk.shared_libs = %VNDK_SAMEPROCESS_LIBRARIES%
-
# LLNDK library moved into apex
namespace.rs.link.neuralnetworks.shared_libs = libneuralnetworks.so
diff --git a/rootdir/etc/ld.config.vndk_lite.txt b/rootdir/etc/ld.config.vndk_lite.txt
index 0bb60ab..2e213ec 100644
--- a/rootdir/etc/ld.config.vndk_lite.txt
+++ b/rootdir/etc/ld.config.vndk_lite.txt
@@ -265,7 +265,7 @@
namespace.rs.asan.permitted.paths += /vendor/${LIB}
namespace.rs.asan.permitted.paths += /data
-namespace.rs.links = default,vndk,neuralnetworks
+namespace.rs.links = default,neuralnetworks
namespace.rs.link.default.shared_libs = %LLNDK_LIBRARIES%
namespace.rs.link.default.shared_libs += %SANITIZER_RUNTIME_LIBRARIES%
@@ -273,8 +273,6 @@
# namespace because RS framework libs are using them.
namespace.rs.link.default.shared_libs += %PRIVATE_LLNDK_LIBRARIES%
-namespace.rs.link.vndk.shared_libs = %VNDK_SAMEPROCESS_LIBRARIES%
-
# LLNDK library moved into apex
namespace.rs.link.neuralnetworks.shared_libs = libneuralnetworks.so
diff --git a/rootdir/init.rc b/rootdir/init.rc
index 0f61a61..bb36139 100644
--- a/rootdir/init.rc
+++ b/rootdir/init.rc
@@ -536,6 +536,7 @@
mkdir /data/misc/profiles/ref 0771 system system
mkdir /data/misc/profman 0770 system shell
mkdir /data/misc/gcov 0770 root root
+ mkdir /data/misc/installd 0700 root root
mkdir /data/preloads 0775 system system
@@ -867,6 +868,8 @@
chmod 0773 /data/misc/trace
# Give reads to anyone for the window trace folder on debug builds.
chmod 0775 /data/misc/wmtrace
+
+on init && property:ro.debuggable=1
start console
service flash_recovery /system/bin/install-recovery.sh
diff --git a/sdcard/sdcard.cpp b/sdcard/sdcard.cpp
index 2b35819..622de5b 100644
--- a/sdcard/sdcard.cpp
+++ b/sdcard/sdcard.cpp
@@ -315,7 +315,8 @@
PLOG(ERROR) << "setting RLIMIT_NOFILE failed";
}
- while ((fs_read_atomic_int("/data/.layout_version", &fs_version) == -1) || (fs_version < 3)) {
+ while ((fs_read_atomic_int("/data/misc/installd/layout_version", &fs_version) == -1) ||
+ (fs_version < 3)) {
LOG(ERROR) << "installd fs upgrade not yet complete; waiting...";
sleep(1);
}