diff --git a/main.cpp b/main.cpp
index 68477ac..4810d43 100644
--- a/main.cpp
+++ b/main.cpp
@@ -36,11 +36,9 @@
 #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;
@@ -117,9 +115,6 @@
         exit(1);
     }
 
-    coldboot("/sys/block");
-//    coldboot("/sys/class/switch");
-
     /*
      * Now that we're up, we can respond to commands
      */
@@ -139,7 +134,7 @@
 
     // Eventually we'll become the monitoring thread
     while(1) {
-        sleep(1000);
+        pause();
     }
 
     LOG(ERROR) << "Vold exiting";
@@ -170,49 +165,6 @@
     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());
