From 902a339c93f44bc7290bede2f91f3a5c7cb16402 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sat, 25 Sep 2010 13:47:31 +0200 Subject: [PATCH] readahead-replay: delay ready notification until we queued first read --- src/readahead-collect.c | 1 + src/readahead-replay.c | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/readahead-collect.c b/src/readahead-collect.c index fe35da70..6b9fb465 100644 --- a/src/readahead-collect.c +++ b/src/readahead-collect.c @@ -54,6 +54,7 @@ * * - detect ssd/lvm/... on btrfs * - read ahead directories + * - sd_readahead_cancel */ static int btrfs_defrag(int fd) { diff --git a/src/readahead-replay.c b/src/readahead-replay.c index 58d9468c..c01f73e6 100644 --- a/src/readahead-replay.c +++ b/src/readahead-replay.c @@ -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; -- 2.39.5