Merge "Block and wait for /dev/block/loop<N> to appear in case it was created asynchronously." am: ee5eb39169 am: 5973b8cf00 am: 4d0dadb629
am: b8150885e3
Change-Id: I9d5b0b46d11ba4b75073812b9ff71b061a694d34
diff --git a/Loop.cpp b/Loop.cpp
index fa8f8ba..9fa876c 100644
--- a/Loop.cpp
+++ b/Loop.cpp
@@ -31,16 +31,20 @@
#include <linux/kdev_t.h>
+#include <chrono>
+
#include <android-base/logging.h>
#include <android-base/stringprintf.h>
#include <android-base/strings.h>
#include <android-base/unique_fd.h>
+#include <fs_mgr/file_wait.h>
#include <utils/Trace.h>
#include "Loop.h"
#include "VoldUtil.h"
#include "sehandle.h"
+using namespace std::literals;
using android::base::StringPrintf;
using android::base::unique_fd;
@@ -74,6 +78,10 @@
PLOG(ERROR) << "Failed to open " << target;
return -errno;
}
+ if (!android::fs_mgr::WaitForFile(out_device, 2s)) {
+ LOG(ERROR) << "Failed to find " << out_device;
+ return -ENOENT;
+ }
unique_fd device_fd(open(out_device.c_str(), O_RDWR | O_CLOEXEC));
if (device_fd.get() == -1) {
PLOG(ERROR) << "Failed to open " << out_device;