X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Freadahead%2Freadahead-replay.c;h=a6529f8bace696c8a01393dcfafe7e62a9b71ebf;hb=4019a16d5b65633e5f6d671c16d3215d7f7f29fc;hp=65011ac4be3996d0ff41f92f44e889fdf3cb289a;hpb=e5e83e8362e946890ac991fc86a2c5869f9befdf;p=elogind.git
diff --git a/src/readahead/readahead-replay.c b/src/readahead/readahead-replay.c
index 65011ac4b..a6529f8ba 100644
--- a/src/readahead/readahead-replay.c
+++ b/src/readahead/readahead-replay.c
@@ -6,16 +6,16 @@
Copyright 2010 Lennart Poettering
systemd is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
+ under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
systemd is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with systemd; If not, see .
***/
@@ -35,10 +35,11 @@
#include
#include
+#include
+
#include "missing.h"
#include "util.h"
#include "set.h"
-#include "sd-daemon.h"
#include "ioprio.h"
#include "readahead-common.h"
#include "virt.h"
@@ -131,8 +132,7 @@ static int replay(const char *root) {
assert(root);
- write_one_line_file("/proc/self/oom_score_adj", "1000");
- bump_request_nr(root);
+ block_bump_request_nr(root);
if (asprintf(&pack_fn, "%s/.readahead", root) < 0) {
log_error("Out of memory");
@@ -185,7 +185,13 @@ static int replay(const char *root) {
if (on_ssd)
prio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0);
else
- prio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_RT, 7);
+ /* We are not using RT here, since we'd starve IO that
+ we didn't record (which is for example blkid, since
+ its disk accesses go directly to the block device and
+ are thus not visible in fallocate) to death. However,
+ we do ask for an IO prio that is slightly higher than
+ the default (which is BE. 4) */
+ prio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, 2);
if (ioprio_set(IOPRIO_WHO_PROCESS, getpid(), prio) < 0)
log_warning("Failed to set IDLE IO priority class: %m");
@@ -337,13 +343,14 @@ int main(int argc, char*argv[]) {
int r;
const char *root;
- log_set_target(LOG_TARGET_SYSLOG_OR_KMSG);
+ log_set_target(LOG_TARGET_AUTO);
log_parse_environment();
log_open();
umask(0022);
- if ((r = parse_argv(argc, argv)) <= 0)
+ r = parse_argv(argc, argv);
+ if (r <= 0)
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
root = optind < argc ? argv[optind] : "/";
@@ -353,12 +360,8 @@ 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()))
+ shared = shared_get();
+ if (!shared)
return 1;
shared->replay = getpid();