Revert "vm_tools: Use pmem device for rootfs in VMs"
The 3.18 host kernel has kernel panics when using virtio-pmem for the guest.
This reverts commit e1c04c4574a2723caf63d1e40655d9fc4719639a.
BUG=chromium:1009961
TEST=crostini.SanityArtifact
Change-Id: I2bd2b76e8fd8f065faf20fa7b1278b8dc41492e5
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/1834276
Tested-by: Stephen Barber <smbarber@chromium.org>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Commit-Queue: Stephen Barber <smbarber@chromium.org>
Legacy-Commit-Queue: Commit Bot <commit-bot@chromium.org>
diff --git a/vm_tools/concierge/service.cc b/vm_tools/concierge/service.cc
index 3989dc3..d6c0aa3 100644
--- a/vm_tools/concierge/service.cc
+++ b/vm_tools/concierge/service.cc
@@ -1081,11 +1081,10 @@
}
// Track the next available virtio-blk device name.
- // Assume that the rootfs filesystem was assigned /dev/pmem0 if
- // USE_PMEM_DEVICE_FOR_ROOTFS is set, /dev/vda otherwise.
- // Assume every subsequent image was assigned a letter in alphabetical order
+ // Assume that the rootfs filesystem was assigned /dev/vda and that
+ // every subsequent image was assigned a letter in alphabetical order
// starting from 'b'.
- unsigned char disk_letter = USE_PMEM_DEVICE_FOR_ROOTFS ? 'a' : 'b';
+ unsigned char disk_letter = 'b';
// In newer components, the /opt/google/cros-containers directory
// is split into its own disk image(vm_tools.img). Detect whether it exists
@@ -1963,7 +1962,8 @@
base::StringPrintf("%s/%zu", dst_addr.c_str(), prefix_length);
string error;
- if (!vm->StartTermina(std::move(container_subnet_cidr), &error)) {
+ if (!vm->StartTermina(std::move(container_subnet_cidr), vm->StatefulDevice(),
+ &error)) {
failure_reason->assign(error);
return false;
}
diff --git a/vm_tools/concierge/termina_vm.cc b/vm_tools/concierge/termina_vm.cc
index d40e2ac..2a3231e 100644
--- a/vm_tools/concierge/termina_vm.cc
+++ b/vm_tools/concierge/termina_vm.cc
@@ -137,6 +137,7 @@
kCrosvmBin, "run",
"--cpus", std::to_string(base::SysInfo::NumberOfProcessors()),
"--mem", GetVmMemoryMiB(),
+ "--root", rootfs.value(),
"--tap-fd", std::to_string(tap_fd.get()),
"--cid", std::to_string(vsock_cid_),
"--socket", GetVmSocketPath(),
@@ -146,16 +147,6 @@
};
// clang-format on
- if (USE_PMEM_DEVICE_FOR_ROOTFS) {
- args.emplace_back("--pmem-device");
- args.emplace_back(rootfs.value());
- args.emplace_back("--params");
- args.emplace_back("root=/dev/pmem0 ro rootflags=dax");
- } else {
- args.emplace_back("--root");
- args.emplace_back(rootfs.value());
- }
-
if (USE_CROSVM_WL_DMABUF)
args.emplace_back("--wayland-dmabuf");
@@ -364,6 +355,7 @@
}
bool TerminaVm::StartTermina(std::string lxd_subnet,
+ std::string stateful_device,
std::string* out_error) {
// We record the kernel version early to ensure that no container has
// been started and the VM can still be trusted.
@@ -374,7 +366,7 @@
request.set_tremplin_ipv4_address(GatewayAddress());
request.mutable_lxd_ipv4_subnet()->swap(lxd_subnet);
- request.set_stateful_device(StatefulDevice());
+ request.mutable_stateful_device()->swap(stateful_device);
grpc::ClientContext ctx;
ctx.set_deadline(gpr_time_add(
diff --git a/vm_tools/concierge/termina_vm.h b/vm_tools/concierge/termina_vm.h
index 37c7c3f..e8844cf 100644
--- a/vm_tools/concierge/termina_vm.h
+++ b/vm_tools/concierge/termina_vm.h
@@ -89,6 +89,7 @@
// Starts Termina-specific services in the guest.
bool StartTermina(std::string lxd_subnet,
+ std::string stateful_device,
std::string* out_error);
// Mount a 9p file system inside the VM. The guest VM connects to a server
diff --git a/vm_tools/host/BUILD.gn b/vm_tools/host/BUILD.gn
index 5ded761..aba0f32 100644
--- a/vm_tools/host/BUILD.gn
+++ b/vm_tools/host/BUILD.gn
@@ -35,10 +35,7 @@
config("host_target_defaults") {
configs = [ ":host_target_defaults_pkgs" ]
- defines = [
- "USE_CROSVM_WL_DMABUF=${use.crosvm_wl_dmabuf}",
- "USE_PMEM_DEVICE_FOR_ROOTFS=${use.amd64}",
- ]
+ defines = [ "USE_CROSVM_WL_DMABUF=${use.crosvm_wl_dmabuf}" ]
}
executable("maitred_client") {
diff --git a/vm_tools/maitred/service_impl.cc b/vm_tools/maitred/service_impl.cc
index e199136..a90f1d6 100644
--- a/vm_tools/maitred/service_impl.cc
+++ b/vm_tools/maitred/service_impl.cc
@@ -466,9 +466,8 @@
if (ret != 0) {
int saved_errno = errno;
PLOG(ERROR) << "Failed to mount stateful disk";
- return grpc::Status(grpc::INTERNAL, string("failed to mount stateful (") +
- stateful_device +
- "): " + strerror(saved_errno));
+ return grpc::Status(grpc::INTERNAL, string("failed to mount stateful: ") +
+ strerror(saved_errno));
}
// Resize the stateful filesystem to fill the block device in case