chiark / gitweb /
readahead-replay: delay ready notification until we queued first read
authorLennart Poettering <lennart@poettering.net>
Sat, 25 Sep 2010 11:47:31 +0000 (13:47 +0200)
committerLennart Poettering <lennart@poettering.net>
Sat, 25 Sep 2010 11:47:31 +0000 (13:47 +0200)
src/readahead-collect.c
src/readahead-replay.c

index fe35da7..6b9fb46 100644 (file)
@@ -54,6 +54,7 @@
  *
  * - detect ssd/lvm/... on btrfs
  * - read ahead directories
+ * - sd_readahead_cancel
  */
 
 static int btrfs_defrag(int fd) {
index 58d9468..c01f73e 100644 (file)
@@ -114,7 +114,7 @@ static int replay(const char *root) {
         char line[LINE_MAX];
         int r = 0;
         char *pack_fn = NULL, c;
-        bool on_ssd;
+        bool on_ssd, ready = false;
         int prio;
 
         assert(root);
@@ -168,9 +168,7 @@ static int replay(const char *root) {
         if (ioprio_set(IOPRIO_WHO_PROCESS, getpid(), prio) < 0)
                 log_warning("Failed to set IDLE IO priority class: %m");
 
-        sd_notify(0,
-                  "READY=1\n"
-                  "STATUS=Replaying readahead data");
+        sd_notify(0, "STATUS=Replaying readahead data");
 
         log_debug("Replaying...");
 
@@ -181,8 +179,18 @@ static int replay(const char *root) {
                         r = k;
                         goto finish;
                 }
+
+                if (!ready) {
+                        /* We delay the ready notification until we
+                         * queued at least one read */
+                        sd_notify(0, "READY=1");
+                        ready = true;
+                }
         }
 
+        if (!ready)
+                sd_notify(0, "READY=1");
+
         if (ferror(pack)) {
                 log_error("Failed to read pack file.");
                 r = -EIO;