chiark / gitweb /
condition: drop pointless double negation
[elogind.git] / src / readahead-replay.c
index e22fc04392a8ad7d3d9e8d057b04d3d415bcc050..cd89654f983d105e7731b9d2dd7ae4ec7a9ad7ba 100644 (file)
@@ -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 && errno != EPERM && errno != EACCES)
+                        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 (detect_virtualization(NULL) > 0) {
+                log_info("Disabling readahead replay due to execution in virtualized environment.");
+                return 0;
+        }
+
         if (!(shared = shared_get()))
                 return 1;