X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Freadahead-replay.c;h=e9c573a5930f0ada0e2359978fe4b0eecaa35084;hb=70db8e3a0b68cf2eab500592ba16b2acf0737331;hp=e22fc04392a8ad7d3d9e8d057b04d3d415bcc050;hpb=d9c7a87b35289e9a5ba94c097e861640d1357e6d;p=elogind.git diff --git a/src/readahead-replay.c b/src/readahead-replay.c index e22fc0439..e9c573a59 100644 --- a/src/readahead-replay.c +++ b/src/readahead-replay.c @@ -60,9 +60,12 @@ static int unpack_file(FILE *pack) { char_array_0(fn); truncate_nl(fn); - if ((fd = open(fn, O_RDONLY|O_CLOEXEC|O_NOATIME|O_NOCTTY|O_NOFOLLOW)) < 0) - log_warning("open(%s) failed: %m", fn); - else if (file_verify(fd, fn, arg_file_size_max, &st) <= 0) { + if ((fd = open(fn, O_RDONLY|O_CLOEXEC|O_NOATIME|O_NOCTTY|O_NOFOLLOW)) < 0) { + + if (errno != ENOENT) + log_warning("open(%s) failed: %m", fn); + + } else if (file_verify(fd, fn, arg_file_size_max, &st) <= 0) { close_nointr_nofail(fd); fd = -1; } @@ -127,6 +130,7 @@ static int replay(const char *root) { assert(root); write_one_line_file("/proc/self/oom_score_adj", "1000"); + bump_request_nr(root); if (asprintf(&pack_fn, "%s/.readahead", root) < 0) { log_error("Out of memory"); @@ -135,7 +139,7 @@ static int replay(const char *root) { } if ((!(pack = fopen(pack_fn, "re")))) { - if (errno == -ENOENT) + if (errno == ENOENT) log_debug("No pack file found."); else { log_error("Failed to open pack file: %m"); @@ -145,6 +149,8 @@ static int replay(const char *root) { goto finish; } + posix_fadvise(fileno(pack), 0, 0, POSIX_FADV_WILLNEED); + if ((inotify_fd = open_inotify()) < 0) { r = inotify_fd; goto finish; @@ -340,6 +346,11 @@ int main(int argc, char*argv[]) { return 0; } + if (running_in_vm()) { + log_info("Disabling readahead replay due to execution in virtual machine."); + return 0; + } + if (!(shared = shared_get())) return 1;