diff --git a/main.cpp b/main.cpp
index 4810d43..6754b0a 100644
--- a/main.cpp
+++ b/main.cpp
@@ -36,9 +36,11 @@
 #include <sys/types.h>
 #include <getopt.h>
 #include <fcntl.h>
+#include <dirent.h>
 #include <fs_mgr.h>
 
 static int process_config(VolumeManager *vm, bool* has_adoptable);
+static void coldboot(const char *path);
 static void parse_args(int argc, char** argv);
 
 struct fstab *fstab;
@@ -132,6 +134,10 @@
     // a deadlock between vold and init (see b/34278978 for details)
     property_set("vold.has_adoptable", has_adoptable ? "1" : "0");
 
+    // Do coldboot here so it won't block booting,
+    // also the cold boot is needed in case we have flash drive
+    // connected before Vold launched
+    coldboot("/sys/block");
     // Eventually we'll become the monitoring thread
     while(1) {
         pause();
@@ -165,6 +171,49 @@
     CHECK(android::vold::sFsckUntrustedContext != nullptr);
 }
 
+static void do_coldboot(DIR *d, int lvl) {
+    struct dirent *de;
+    int dfd, fd;
+
+    dfd = dirfd(d);
+
+    fd = openat(dfd, "uevent", O_WRONLY | O_CLOEXEC);
+    if(fd >= 0) {
+        write(fd, "add\n", 4);
+        close(fd);
+    }
+
+    while((de = readdir(d))) {
+        DIR *d2;
+
+        if (de->d_name[0] == '.')
+            continue;
+
+        if (de->d_type != DT_DIR && lvl > 0)
+            continue;
+
+        fd = openat(dfd, de->d_name, O_RDONLY | O_DIRECTORY);
+        if(fd < 0)
+            continue;
+
+        d2 = fdopendir(fd);
+        if(d2 == 0)
+            close(fd);
+        else {
+            do_coldboot(d2, lvl + 1);
+            closedir(d2);
+        }
+    }
+}
+
+static void coldboot(const char *path) {
+    DIR *d = opendir(path);
+    if(d) {
+        do_coldboot(d, 0);
+        closedir(d);
+    }
+}
+
 static int process_config(VolumeManager *vm, bool* has_adoptable) {
     std::string path(android::vold::DefaultFstabPath());
     fstab = fs_mgr_read_fstab(path.c_str());
