chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
execute: socket isn't abstract anymore
[elogind.git]
/
src
/
readahead-collect.c
diff --git
a/src/readahead-collect.c
b/src/readahead-collect.c
index ac46c7b3ea2afca7e49fb34c71e64ba93c674b97..3c48a02fc9e49dc9a92c3e43d4715a0dbcbfbbe9 100644
(file)
--- a/
src/readahead-collect.c
+++ b/
src/readahead-collect.c
@@
-96,6
+96,9
@@
static int pack_file(FILE *pack, const char *fn, bool on_btrfs) {
if (errno == ENOENT)
return 0;
if (errno == ENOENT)
return 0;
+ if (errno == EPERM || errno == EACCES)
+ return 0;
+
log_warning("open(%s) failed: %m", fn);
r = -errno;
goto finish;
log_warning("open(%s) failed: %m", fn);
r = -errno;
goto finish;
@@
-116,9
+119,10
@@
static int pack_file(FILE *pack, const char *fn, bool on_btrfs) {
goto finish;
}
goto finish;
}
- pages = l /
PAGE_SIZE
;
+ pages = l /
page_size()
;
vec = alloca(pages);
vec = alloca(pages);
+ memset(vec, 0, pages);
if (mincore(start, l, vec) < 0) {
log_warning("mincore(%s) failed: %m", fn);
r = -errno;
if (mincore(start, l, vec) < 0) {
log_warning("mincore(%s) failed: %m", fn);
r = -errno;
@@
-286,13
+290,13
@@
static int collect(const char *root) {
log_debug("Collecting...");
log_debug("Collecting...");
- if (access("/
dev/.
systemd/readahead/cancel", F_OK) >= 0) {
+ if (access("/
run/
systemd/readahead/cancel", F_OK) >= 0) {
log_debug("Collection canceled");
r = -ECANCELED;
goto finish;
}
log_debug("Collection canceled");
r = -ECANCELED;
goto finish;
}
- if (access("/
dev/.
systemd/readahead/done", F_OK) >= 0) {
+ if (access("/
run/
systemd/readahead/done", F_OK) >= 0) {
log_debug("Got termination request");
goto done;
}
log_debug("Got termination request");
goto done;
}
@@
-636,6
+640,7
@@
static int parse_argv(int argc, char *argv[]) {
int main(int argc, char *argv[]) {
int r;
int main(int argc, char *argv[]) {
int r;
+ const char *root;
log_set_target(LOG_TARGET_SYSLOG_OR_KMSG);
log_parse_environment();
log_set_target(LOG_TARGET_SYSLOG_OR_KMSG);
log_parse_environment();
@@
-644,18
+649,30
@@
int main(int argc, char *argv[]) {
if ((r = parse_argv(argc, argv)) <= 0)
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
if ((r = parse_argv(argc, argv)) <= 0)
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
+ root = optind < argc ? argv[optind] : "/";
+
+ if (fs_on_read_only(root) > 0) {
+ log_info("Disabling readahead collector due to read-only media.");
+ return 0;
+ }
+
if (!enough_ram()) {
log_info("Disabling readahead collector due to low memory.");
return 0;
}
if (!enough_ram()) {
log_info("Disabling readahead collector due to low memory.");
return 0;
}
+ if (detect_virtualization(NULL) > 0) {
+ log_info("Disabling readahead collector due to execution in virtualized environment.");
+ return 0;
+ }
+
if (!(shared = shared_get()))
return 1;
shared->collect = getpid();
__sync_synchronize();
if (!(shared = shared_get()))
return 1;
shared->collect = getpid();
__sync_synchronize();
- if (collect(
optind < argc ? argv[optind] : "/"
) < 0)
+ if (collect(
root
) < 0)
return 1;
return 0;
return 1;
return 0;