summaryrefslogtreecommitdiff
path: root/src/readahead/readahead-replay.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2012-06-21 23:53:20 +0200
committerLennart Poettering <lennart@poettering.net>2012-06-21 23:53:20 +0200
commit87ce22cc0d097d9cd0297d0141eadba6c573c299 (patch)
tree8b7831ad915705a9ee67aa2e6defdc58dc3e9a9d /src/readahead/readahead-replay.c
parentb4bdfefac3fcf633aa0700a981d854cc49a9725b (diff)
readahead: merge three binaries into one
since the binaries share much of the same code and we better load only one binary instead of two from disk at early boot let's merge the three readahead binaries into one. This also allows us to drop a lot of duplicated code.
Diffstat (limited to 'src/readahead/readahead-replay.c')
-rw-r--r--src/readahead/readahead-replay.c94
1 files changed, 7 insertions, 87 deletions
diff --git a/src/readahead/readahead-replay.c b/src/readahead/readahead-replay.c
index fc2c33fcc..6e6db601d 100644
--- a/src/readahead/readahead-replay.c
+++ b/src/readahead/readahead-replay.c
@@ -44,8 +44,6 @@
#include "readahead-common.h"
#include "virt.h"
-static off_t arg_file_size_max = READAHEAD_FILE_SIZE_MAX;
-
static ReadaheadShared *shared = NULL;
static int unpack_file(FILE *pack) {
@@ -289,103 +287,25 @@ finish:
return r;
}
+int main_replay(const char *root) {
-static int help(void) {
-
- printf("%s [OPTIONS...] [DIRECTORY]\n\n"
- "Replay collected read-ahead data on early boot.\n\n"
- " -h --help Show this help\n"
- " --max-file-size=BYTES Maximum size of files to read ahead\n",
- program_invocation_short_name);
-
- return 0;
-}
-
-static int parse_argv(int argc, char *argv[]) {
-
- enum {
- ARG_FILE_SIZE_MAX
- };
-
- static const struct option options[] = {
- { "help", no_argument, NULL, 'h' },
- { "file-size-max", required_argument, NULL, ARG_FILE_SIZE_MAX },
- { NULL, 0, NULL, 0 }
- };
-
- int c;
-
- assert(argc >= 0);
- assert(argv);
-
- while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) {
-
- switch (c) {
-
- case 'h':
- help();
- return 0;
-
- case ARG_FILE_SIZE_MAX: {
- unsigned long long ull;
-
- if (safe_atollu(optarg, &ull) < 0 || ull <= 0) {
- log_error("Failed to parse maximum file size %s.", optarg);
- return -EINVAL;
- }
-
- arg_file_size_max = (off_t) ull;
- break;
- }
-
- case '?':
- return -EINVAL;
-
- default:
- log_error("Unknown option code %c", c);
- return -EINVAL;
- }
- }
-
- if (optind != argc &&
- optind != argc-1) {
- help();
- return -EINVAL;
- }
-
- return 1;
-}
-
-int main(int argc, char*argv[]) {
- int r;
- const char *root;
-
- log_set_target(LOG_TARGET_SAFE);
- log_parse_environment();
- log_open();
-
- umask(0022);
-
- r = parse_argv(argc, argv);
- if (r <= 0)
- return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
-
- root = optind < argc ? argv[optind] : "/";
+ if (!root)
+ root = "/";
if (!enough_ram()) {
log_info("Disabling readahead replay due to low memory.");
- return 0;
+ return EXIT_SUCCESS;
}
shared = shared_get();
if (!shared)
- return 1;
+ return EXIT_FAILURE;
shared->replay = getpid();
__sync_synchronize();
if (replay(root) < 0)
- return 1;
+ return EXIT_FAILURE;
- return 0;
+ return EXIT_SUCCESS;
}