X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Freadahead-replay.c;h=d2de7ef2887b67620bc9cafc42838929e51bfd13;hp=87f2e598b41fbee218a3ad33b577c5b4f855b5ec;hb=820fa964859bab12bc8b6afea980399c71e34f5b;hpb=a78899f541b944dd02fe581b1c3230eadccad1ba diff --git a/src/readahead-replay.c b/src/readahead-replay.c index 87f2e598b..d2de7ef28 100644 --- a/src/readahead-replay.c +++ b/src/readahead-replay.c @@ -62,7 +62,7 @@ static int unpack_file(FILE *pack) { if ((fd = open(fn, O_RDONLY|O_CLOEXEC|O_NOATIME|O_NOCTTY|O_NOFOLLOW)) < 0) { - if (errno != ENOENT) + if (errno != ENOENT && errno != EPERM && errno != EACCES) log_warning("open(%s) failed: %m", fn); } else if (file_verify(fd, fn, arg_file_size_max, &st) <= 0) { @@ -192,7 +192,7 @@ static int replay(const char *root) { log_debug("Replaying..."); - if (access("/dev/.systemd/readahead/noreplay", F_OK) >= 0) { + if (access("/dev/.run/systemd/readahead/noreplay", F_OK) >= 0) { log_debug("Got termination request"); goto done; } @@ -333,6 +333,7 @@ static int parse_argv(int argc, char *argv[]) { int main(int argc, char*argv[]) { int r; + const char *root; log_set_target(LOG_TARGET_SYSLOG_OR_KMSG); log_parse_environment(); @@ -341,18 +342,25 @@ int main(int argc, char*argv[]) { if ((r = parse_argv(argc, argv)) <= 0) return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; + root = optind < argc ? argv[optind] : "/"; + if (!enough_ram()) { log_info("Disabling readahead replay due to low memory."); return 0; } + if (detect_virtualization(NULL) > 0) { + log_info("Disabling readahead replay due to execution in virtualized environment."); + return 0; + } + if (!(shared = shared_get())) return 1; shared->replay = getpid(); __sync_synchronize(); - if (replay(optind < argc ? argv[optind] : "/") < 0) + if (replay(root) < 0) return 1; return 0;