Explain why snapuserd is a static binary.
Static binaries are pretty rare (and usually a bad idea) but there's a
rationale for this one, so we should record it.
Test: treehugger
Change-Id: I7fc5c32bbbec1ccf195d94eaedfb1bd718a364e1
diff --git a/fs_mgr/libsnapshot/snapuserd/Android.bp b/fs_mgr/libsnapshot/snapuserd/Android.bp
index 93b0f7c..4d86007 100644
--- a/fs_mgr/libsnapshot/snapuserd/Android.bp
+++ b/fs_mgr/libsnapshot/snapuserd/Android.bp
@@ -61,12 +61,12 @@
"dm-snapshot-merge/snapuserd_worker.cpp",
"dm-snapshot-merge/snapuserd_readahead.cpp",
"snapuserd_daemon.cpp",
- "snapuserd_buffer.cpp",
- "user-space-merge/snapuserd_core.cpp",
- "user-space-merge/snapuserd_dm_user.cpp",
- "user-space-merge/snapuserd_merge.cpp",
- "user-space-merge/snapuserd_readahead.cpp",
- "user-space-merge/snapuserd_transitions.cpp",
+ "snapuserd_buffer.cpp",
+ "user-space-merge/snapuserd_core.cpp",
+ "user-space-merge/snapuserd_dm_user.cpp",
+ "user-space-merge/snapuserd_merge.cpp",
+ "user-space-merge/snapuserd_readahead.cpp",
+ "user-space-merge/snapuserd_transitions.cpp",
"user-space-merge/snapuserd_server.cpp",
],
@@ -95,7 +95,14 @@
init_rc: [
"snapuserd.rc",
],
+
+ // snapuserd is started during early boot by first-stage init. At that
+ // point, /system is mounted using the "dm-user" device-mapper kernel
+ // module. dm-user routes all I/O to userspace to be handled by
+ // snapuserd, which would lead to deadlock if we had to handle page
+ // faults for its code pages.
static_executable: true,
+
system_shared_libs: [],
ramdisk_available: true,
vendor_ramdisk_available: true,
@@ -111,7 +118,7 @@
"dm-snapshot-merge/cow_snapuserd_test.cpp",
"dm-snapshot-merge/snapuserd.cpp",
"dm-snapshot-merge/snapuserd_worker.cpp",
- "snapuserd_buffer.cpp",
+ "snapuserd_buffer.cpp",
],
cflags: [
"-Wall",