No description
Find a file
David Anderson 924858cd18 libdm: Improve the reliability of dm device paths.
This fixes a race condition where WaitForFile() after
GetDmDevicePathByName appears to succeed, but a subsequent operation on
the path fails. This can happen when CreateDevice() is called
immediately after a call to DeleteDevice (from any process), and the
path is re-used, enqueuing udev events to remove and re-add the block
device.

The fix for this is to introduce a new variant of CreateDevice() that
has a timeout parameter. When the timeout is positive, CreateDevice()
will wait for a /dev/block/mapper/by-uuid symlink to be created, which
signals that ueventd has finished processing the operation.

ueventd will now create these by-uuid symlinks for device-mapper nodes.
Unfortunately, the uuid is only available during "change" events, so we
have to special case device-mapper symlink creation. And since the uuid
is not available during "remove" events, we simply find matching links
to remove them.

This ensures that callers of CreateDevice() can use the device path
knowing that no asynchronous removals are pending. Code that uses the
old CreateDevice+WaitForFile pattern will be transitioned to the new
method.

Note that it is safe to ignore the timeout, or to use the "unsafe"
CreateDevice, if the caller ensures the path by other means. For example
first-stage init has no device removal, and regenerates uevents until
it has acquired all the paths it needs.

Finally, since libdm now inspects sysfs unconditionally, libdm consumers
need r_dir_file perms for sysfs_dm in their sepolicy. Additionally
linking to libdm now requires linking to libext2_uuid.

Bug: 135771280
Test: libdm_test
      device flashes, boots
Change-Id: If5a7383ea38f32a7fbbcf24842dce6a668050a70
2019-07-11 15:39:52 -07:00
adb Merge changes from topic "fdevent_refactor" 2019-07-09 20:02:29 +00:00
base Merge "Don't implement our own remove_cvref_t." 2019-07-09 20:10:22 +00:00
bootstat bootstat: add reboot,longkey sub-reason to known set 2019-06-24 06:29:49 +00:00
cpio Switch from dist-for-goals to dist in Android.bp 2018-11-19 23:06:12 -08:00
debuggerd Increase timeout to avoid flaky tests. 2019-06-26 15:08:51 -07:00
demangle Include string.h for strcmp. 2019-05-17 19:49:26 +01:00
deprecated-adf adf: rename. 2019-02-14 16:30:24 -08:00
diagnose_usb Build adbd for recovery 2018-05-24 14:11:11 +09:00
fastboot Rename product_services to system_ext 2019-07-09 08:56:53 +00:00
fs_mgr libdm: Improve the reliability of dm device paths. 2019-07-11 15:39:52 -07:00
gatekeeperd Gatekeeperd maintenance 2019-06-23 11:09:30 -07:00
healthd healthd: charger: shutdown timer configurable 2019-04-08 12:46:47 -07:00
include Move android_filesystem_config.h => fs_config.h 2017-08-02 16:31:19 -07:00
init libdm: Improve the reliability of dm device paths. 2019-07-11 15:39:52 -07:00
janitors Add the two best build system janitors. 2019-03-25 10:25:13 -07:00
libappfuse Close /dev/fuse FD before calling onClosed 2019-05-31 17:06:52 +01:00
libasyncio Revert "Mark libs as double_loadable" 2019-03-11 14:10:34 +00:00
libbacktrace Internalize subclasses of Memory 2019-06-11 12:09:18 -07:00
libbinderwrapper Make libbinderwrapper available in /vendor partition 2018-04-06 08:41:21 +09:00
libcrypto_utils Convert more modules to Android.bp 2018-10-31 21:53:37 -07:00
libcutils Rename product_services to system_ext 2019-07-09 23:34:17 +00:00
libdiskconfig Rename target.linux[_x86[_64]] to target.linux_glibc[_x86[_64]] 2017-10-02 10:44:29 -07:00
libgrallocusage Merge "Build both static and shared lib." 2018-09-25 22:29:31 +00:00
libion libion: convert a header file using update_all.py 2019-04-24 07:02:42 +00:00
libkeyutils mini-keyctl: fix key id parsing by "0x" prefix 2019-04-15 15:19:08 -07:00
liblog Remove an ancient spam-busting hack from logd. 2019-07-08 11:10:11 -07:00
libmeminfo Merge "Fix error printing code." 2019-07-08 21:46:44 +00:00
libmemtrack Revert "Mark libs as double_loadable" 2019-03-11 14:10:34 +00:00
libmemunreachable Merge "memunreachable_test: don't use write to escape addresses" 2019-05-25 00:20:24 +00:00
libmetricslogger DO NOT MERGE - Merge pie-platform-release (PPRL.181205.001) into master 2018-12-11 14:46:12 -08:00
libmodprobe create libmodprobe, integrate into first_stage_init 2019-06-18 13:24:56 -07:00
libnativebridge Update OWNERS for libnativebridge 2019-02-13 19:20:59 +09:00
libnativeloader Fix nullpointer dereference in libnativeloader 2019-05-17 18:51:44 +09:00
libnetutils Refactor OWNERS files for Android Core Networking 2019-02-12 13:25:13 +08:00
libpackagelistparser Add versionCode parser for package list. 2019-03-19 17:04:46 +00:00
libpixelflinger Mark gglMulx and gglMulAddx as always_inline 2019-02-14 11:59:48 -08:00
libprocessgroup Fix IsUsable to check for each controller separately 2019-06-26 11:35:11 -07:00
libprocinfo Merge "Revert "Mark libs as double_loadable"" 2019-03-12 22:11:27 +00:00
libqtaguid Redirect qtaguid native call to netd fwmark client 2017-11-09 18:02:22 -08:00
libsparse Fix an unintialized return value. 2019-05-02 12:54:09 -07:00
libstats Merge "Report last atom tag of the failed stats log." 2019-04-02 23:18:14 +00:00
libsuspend Remove libsuspend from VNDK. 2018-08-14 13:39:55 -07:00
libsync Enable native_bridge_support for libsync 2019-05-15 12:40:33 +02:00
libsystem Enable native_bridge_support for libsystem_headers 2019-05-16 14:13:38 +02:00
libsysutils Enable clang-tidy for libsysutils. 2019-04-24 00:35:58 +09:00
libunwindstack Fix missing load bias. 2019-07-09 10:22:36 -07:00
libusbhost Revert "Mark libs as double_loadable" 2019-03-11 14:10:34 +00:00
libutils Remove utf32 functions. 2019-07-02 18:15:03 -07:00
libvndksupport Enable native_bridge_support for libvndksupport 2019-05-16 14:20:31 +02:00
libziparchive Merge "Finally remove ZipString." 2019-06-20 19:20:39 +00:00
llkd llkd: do not call sync() 2019-01-10 12:52:35 -08:00
lmkd Allow memory metrics on devices that use kernel LMK 2019-04-29 11:02:51 +00:00
logcat logcat: add 'kernel' to defaults 2019-07-08 15:59:25 -07:00
logd Revert "Modularize logd." 2019-06-28 14:16:13 -07:00
logwrapper Build adbd for recovery 2018-05-24 14:11:11 +09:00
property_service init: ro.boottime.init.first_stage 2019-05-08 16:07:10 +00:00
qemu_pipe Build adbd for recovery 2018-05-24 14:11:11 +09:00
reboot reboot: only pause indefinitely for non-shutdown operations 2017-09-29 16:29:52 +00:00
rootdir Merge "Rename product_services to system_ext" 2019-07-11 05:36:23 +00:00
run-as run-as: improve diagnostics on failure. 2019-03-13 11:16:03 -07:00
sdcard Allow callers to pass a flag to not link obb dirs of multiple users. 2019-03-05 14:41:54 -08:00
shell_and_utilities grep is now toybox grep. 2019-07-09 13:28:10 -07:00
storaged Remove liblog's rate limiting 2019-01-16 10:37:14 -08:00
toolbox toolbox: drop NetBSD grep for toybox grep. 2019-07-08 14:29:12 -07:00
trusty Replace legacy trusty gatekeeper HAL with HIDLized version 2019-06-23 11:11:09 -07:00
usbd usbd: Exit in case of charger mode. 2019-06-20 12:13:31 -07:00
watchdogd Move watchdogd out of init 2018-08-02 12:25:58 -07:00
.clang-format Add a 2 width option of clang format. 2017-03-10 13:01:39 -08:00
.clang-format-2 Move clang-formats to build. 2019-01-18 14:26:33 -08:00
.clang-format-4 Move clang-formats to build. 2019-01-18 14:26:33 -08:00
.gitignore Ignore adb/*.pyc files 2015-08-11 12:59:58 -07:00
Android.bp Export android_filesystem_config.h as a filegroup 2017-01-17 18:20:28 -08:00
CleanSpec.mk Rename product_services to system_ext 2019-07-09 08:56:53 +00:00
MODULE_LICENSE_APACHE2 auto import from //depot/cupcake/@135843 2013-07-30 13:56:49 -07:00
NOTICE Fix omission in NOTICE file. 2013-07-30 13:56:55 -07:00
OWNERS Move per-file OWNERS directives to their directories. 2018-06-06 11:49:40 +09:00
PREUPLOAD.cfg Add a PREUPLOAD.cfg file to run git-clang-format on every commit 2017-03-08 16:51:26 +08:00
TEST_MAPPING Hide most symbols in libmemunreachable 2019-05-20 15:18:03 -07:00