summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2013-03-28 00:48:29 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-03-29 10:40:54 +0000
commit38150f17b44aaa2f8b17eca6a77f0ca597e5327f (patch)
tree5ac352fb58086c9be0b50be9f9dd8348cdd1ae5d
parent4b50385e2c828f5ade20bd62b0cc145b0492d613 (diff)
downloadpoky-38150f17b44aaa2f8b17eca6a77f0ca597e5327f.tar.gz
systemd: Upgrade to 199
udevadm is now moved from /usr/bin to /bin so account for that bash completions for udevadm should be packages with udev-utils since thats where udevadm itself is, they were in systemd package which is not correct location for it Backport patches for readahead fixes on spinning disks and to tackle error reported on missing /etc/sysctl.conf (From OE-Core rev: 0e692e846e5d6685619a7ce9f6e7346ced013b9b) Signed-off-by: Khem Raj <raj.khem@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/recipes-core/systemd/systemd/0002-readahead-chunk-on-spinning-media.patch142
-rw-r--r--meta/recipes-core/systemd/systemd/0003-readahead-cleanups.patch86
-rw-r--r--meta/recipes-core/systemd/systemd/0013-systemd-sysctl-Handle-missing-etc-sysctl.conf-proper.patch33
-rw-r--r--meta/recipes-core/systemd/systemd_199.bb (renamed from meta/recipes-core/systemd/systemd_198.bb)11
4 files changed, 268 insertions, 4 deletions
diff --git a/meta/recipes-core/systemd/systemd/0002-readahead-chunk-on-spinning-media.patch b/meta/recipes-core/systemd/systemd/0002-readahead-chunk-on-spinning-media.patch
new file mode 100644
index 0000000000..d57a01c916
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0002-readahead-chunk-on-spinning-media.patch
@@ -0,0 +1,142 @@
1Upstream-Status: Backport
2
3-Khem 2013/03/28
4
5From 94243ef299425d6c7089a7a05c48c9bb8f6cf3da Mon Sep 17 00:00:00 2001
6From: Auke Kok <auke-jan.h.kok@intel.com>
7Date: Fri, 22 Mar 2013 15:09:45 -0700
8Subject: [PATCH 02/17] readahead: chunk on spinning media
9
10Readahead has all sorts of bad side effects depending on your
11storage media. On rotating disks, it may be degrading startup
12performance if enough requests are queued spanning linearly
13over all blocks early at boot, and mount, blkid and friends
14want to insert reads to the start of these block devices after.
15
16The end result is that on spinning disks with ext3/4 that udev
17and mounts take a very long time, and nothing really happens until
18readahead is completely finished.
19
20This has the net effect that the CPU is almost entirely idle
21for the entire period that readahead is working. We could have
22finished starting up quite a lot of services in this time if
23we were smarter at how we do readahead.
24
25This patch sorts all requests into 2 second "chunks" and sub-sorts
26each chunk by block. This adds a single cross-drive seek per "chunk"
27but has the benefit that we will have a lot of the blocks we need
28early on in the boot sequence loaded into memory faster.
29
30For a comparison of how before/after bootcharts look (ext4 on a
31mobile 5400rpm 250GB drive) please look at:
32
33 http://foo-projects.org/~sofar/blocked-tests/
34
35There are bootcharts in the "before" and "after" folders where you
36should be able to see that many low-level services finish 5-7
37seconds earlier with the patch applied (after).
38---
39 Makefile.am | 2 +-
40 src/readahead/readahead-collect.c | 28 +++++++++++++++++++++++++---
41 2 files changed, 26 insertions(+), 4 deletions(-)
42
43diff --git a/Makefile.am b/Makefile.am
44index 37c1cc2..5861976 100644
45--- a/Makefile.am
46+++ b/Makefile.am
47@@ -2956,7 +2956,7 @@ systemd_readahead_SOURCES = \
48 systemd_readahead_LDADD = \
49 libsystemd-shared.la \
50 libsystemd-daemon.la \
51- libudev.la
52+ libudev.la -lm
53
54 dist_doc_DATA += \
55 src/readahead/sd-readahead.c \
56diff --git a/src/readahead/readahead-collect.c b/src/readahead/readahead-collect.c
57index 5d07f47..5d22949 100644
58--- a/src/readahead/readahead-collect.c
59+++ b/src/readahead/readahead-collect.c
60@@ -42,6 +42,7 @@
61 #include <sys/vfs.h>
62 #include <getopt.h>
63 #include <sys/inotify.h>
64+#include <math.h>
65
66 #ifdef HAVE_FANOTIFY_INIT
67 #include <sys/fanotify.h>
68@@ -67,6 +68,7 @@
69 */
70
71 static ReadaheadShared *shared = NULL;
72+static struct timespec starttime;
73
74 /* Avoid collisions with the NULL pointer */
75 #define SECTOR_TO_PTR(s) ULONG_TO_PTR((s)+1)
76@@ -205,6 +207,7 @@ static unsigned long fd_first_block(int fd) {
77 struct item {
78 const char *path;
79 unsigned long block;
80+ unsigned long bin;
81 };
82
83 static int qsort_compare(const void *a, const void *b) {
84@@ -213,6 +216,13 @@ static int qsort_compare(const void *a, const void *b) {
85 i = a;
86 j = b;
87
88+ /* sort by bin first */
89+ if (i->bin < j->bin)
90+ return -1;
91+ if (i->bin > j->bin)
92+ return 1;
93+
94+ /* then sort by sector */
95 if (i->block < j->block)
96 return -1;
97 if (i->block > j->block)
98@@ -250,6 +260,8 @@ static int collect(const char *root) {
99 goto finish;
100 }
101
102+ clock_gettime(CLOCK_MONOTONIC, &starttime);
103+
104 /* If there's no pack file yet we lower the kernel readahead
105 * so that mincore() is accurate. If there is a pack file
106 * already we assume it is accurate enough so that kernel
107@@ -447,10 +459,21 @@ static int collect(const char *root) {
108 free(p);
109 else {
110 unsigned long ul;
111+ struct timespec ts;
112+ struct item *entry;
113+
114+ entry = new0(struct item, 1);
115
116 ul = fd_first_block(m->fd);
117
118- if ((k = hashmap_put(files, p, SECTOR_TO_PTR(ul))) < 0) {
119+ clock_gettime(CLOCK_MONOTONIC, &ts);
120+
121+ entry->block = ul;
122+ entry->path = strdup(p);
123+ entry->bin = round((ts.tv_sec - starttime.tv_sec +
124+ ((ts.tv_nsec - starttime.tv_nsec) / 1000000000.0)) / 2.0);
125+
126+ if ((k = hashmap_put(files, p, entry)) < 0) {
127 log_warning("set_put() failed: %s", strerror(-k));
128 free(p);
129 }
130@@ -518,8 +541,7 @@ done:
131
132 j = ordered;
133 HASHMAP_FOREACH_KEY(q, p, files, i) {
134- j->path = p;
135- j->block = PTR_TO_SECTOR(q);
136+ memcpy(j, q, sizeof(struct item));
137 j++;
138 }
139
140--
1411.7.9.5
142
diff --git a/meta/recipes-core/systemd/systemd/0003-readahead-cleanups.patch b/meta/recipes-core/systemd/systemd/0003-readahead-cleanups.patch
new file mode 100644
index 0000000000..e0b68df607
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0003-readahead-cleanups.patch
@@ -0,0 +1,86 @@
1Upstream-Status: Backport
2
3-Khem 2013/03/28
4
5From b0640287f784a320661f7206c9ade07b99003fd5 Mon Sep 17 00:00:00 2001
6From: Auke Kok <auke-jan.h.kok@intel.com>
7Date: Tue, 26 Mar 2013 11:13:47 -0700
8Subject: [PATCH 03/17] readahead: cleanups
9
10- check for OOM
11- no need to use floats and round()
12---
13 Makefile.am | 2 +-
14 src/readahead/readahead-collect.c | 20 ++++++++++++++------
15 2 files changed, 15 insertions(+), 7 deletions(-)
16
17diff --git a/Makefile.am b/Makefile.am
18index 5861976..37c1cc2 100644
19--- a/Makefile.am
20+++ b/Makefile.am
21@@ -2956,7 +2956,7 @@ systemd_readahead_SOURCES = \
22 systemd_readahead_LDADD = \
23 libsystemd-shared.la \
24 libsystemd-daemon.la \
25- libudev.la -lm
26+ libudev.la
27
28 dist_doc_DATA += \
29 src/readahead/sd-readahead.c \
30diff --git a/src/readahead/readahead-collect.c b/src/readahead/readahead-collect.c
31index 5d22949..e2fd8df 100644
32--- a/src/readahead/readahead-collect.c
33+++ b/src/readahead/readahead-collect.c
34@@ -68,7 +68,7 @@
35 */
36
37 static ReadaheadShared *shared = NULL;
38-static struct timespec starttime;
39+static usec_t starttime;
40
41 /* Avoid collisions with the NULL pointer */
42 #define SECTOR_TO_PTR(s) ULONG_TO_PTR((s)+1)
43@@ -260,7 +260,7 @@ static int collect(const char *root) {
44 goto finish;
45 }
46
47- clock_gettime(CLOCK_MONOTONIC, &starttime);
48+ starttime = now(CLOCK_MONOTONIC);
49
50 /* If there's no pack file yet we lower the kernel readahead
51 * so that mincore() is accurate. If there is a pack file
52@@ -459,19 +459,27 @@ static int collect(const char *root) {
53 free(p);
54 else {
55 unsigned long ul;
56- struct timespec ts;
57+ usec_t entrytime;
58 struct item *entry;
59
60 entry = new0(struct item, 1);
61+ if (!entry) {
62+ r = log_oom();
63+ goto finish;
64+ }
65
66 ul = fd_first_block(m->fd);
67
68- clock_gettime(CLOCK_MONOTONIC, &ts);
69+ entrytime = now(CLOCK_MONOTONIC);
70
71 entry->block = ul;
72 entry->path = strdup(p);
73- entry->bin = round((ts.tv_sec - starttime.tv_sec +
74- ((ts.tv_nsec - starttime.tv_nsec) / 1000000000.0)) / 2.0);
75+ if (!entry->path) {
76+ free(entry);
77+ r = log_oom();
78+ goto finish;
79+ }
80+ entry->bin = (entrytime - starttime) / 2000000;
81
82 if ((k = hashmap_put(files, p, entry)) < 0) {
83 log_warning("set_put() failed: %s", strerror(-k));
84--
851.7.9.5
86
diff --git a/meta/recipes-core/systemd/systemd/0013-systemd-sysctl-Handle-missing-etc-sysctl.conf-proper.patch b/meta/recipes-core/systemd/systemd/0013-systemd-sysctl-Handle-missing-etc-sysctl.conf-proper.patch
new file mode 100644
index 0000000000..f2c8e0290f
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0013-systemd-sysctl-Handle-missing-etc-sysctl.conf-proper.patch
@@ -0,0 +1,33 @@
1Upstream-Status: Backport
2
3-Khem 2013/03/28
4
5From 6f6fad96addf6b00b55c98cc0d0d8026b0c1e7ca Mon Sep 17 00:00:00 2001
6From: Eelco Dolstra <eelco.dolstra@logicblox.com>
7Date: Wed, 27 Mar 2013 13:41:59 +0100
8Subject: [PATCH 13/17] systemd-sysctl: Handle missing /etc/sysctl.conf
9 properly
10
11Since fabe5c0e5fce730aa66e10a9c4f9fdd443d7aeda, systemd-sysctl returns
12a non-zero exit code if /etc/sysctl.conf does not exist, due to a
13broken ENOENT check.
14---
15 src/sysctl/sysctl.c | 2 +-
16 1 file changed, 1 insertion(+), 1 deletion(-)
17
18diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c
19index 2d43660..79f3f77 100644
20--- a/src/sysctl/sysctl.c
21+++ b/src/sysctl/sysctl.c
22@@ -125,7 +125,7 @@ static int parse_file(Hashmap *sysctl_options, const char *path, bool ignore_eno
23
24 r = search_and_fopen_nulstr(path, "re", conf_file_dirs, &f);
25 if (r < 0) {
26- if (ignore_enoent && errno == -ENOENT)
27+ if (ignore_enoent && r == -ENOENT)
28 return 0;
29
30 log_error("Failed to open file '%s', ignoring: %s", path, strerror(-r));
31--
321.7.9.5
33
diff --git a/meta/recipes-core/systemd/systemd_198.bb b/meta/recipes-core/systemd/systemd_199.bb
index 6a8db512ca..74b14afeaf 100644
--- a/meta/recipes-core/systemd/systemd_198.bb
+++ b/meta/recipes-core/systemd/systemd_199.bb
@@ -23,10 +23,13 @@ SRC_URI = "http://www.freedesktop.org/software/systemd/systemd-${PV}.tar.xz \
23 file://var-run.conf \ 23 file://var-run.conf \
24 ${UCLIBCPATCHES} \ 24 ${UCLIBCPATCHES} \
25 file://00-create-volatile.conf \ 25 file://00-create-volatile.conf \
26 file://0002-readahead-chunk-on-spinning-media.patch \
27 file://0003-readahead-cleanups.patch \
28 file://0013-systemd-sysctl-Handle-missing-etc-sysctl.conf-proper.patch \
26 file://init \ 29 file://init \
27 " 30 "
28SRC_URI[md5sum] = "26a75e2a310f8c1c1ea9ec26ddb171c5" 31SRC_URI[md5sum] = "4bb13f84ce211e93f0141774a90a2322"
29SRC_URI[sha256sum] = "444492355e5ff0ad99e0691ecaff1081ee8d45901580f47ba8b74e56107c71bf" 32SRC_URI[sha256sum] = "8c4462a04f3ecf7f083782e5e0687913b1d33c6444bf20fa2f31df9222965fed"
30 33
31UCLIBCPATCHES = "" 34UCLIBCPATCHES = ""
32UCLIBCPATCHES_libc-uclibc = "file://systemd-pam-configure-check-uclibc.patch \ 35UCLIBCPATCHES_libc-uclibc = "file://systemd-pam-configure-check-uclibc.patch \
@@ -114,7 +117,7 @@ PACKAGES_DYNAMIC += "^lib(udev|gudev|systemd).*"
114PACKAGES =+ "${PN}-gui ${PN}-vconsole-setup ${PN}-initramfs ${PN}-analyze" 117PACKAGES =+ "${PN}-gui ${PN}-vconsole-setup ${PN}-initramfs ${PN}-analyze"
115 118
116USERADD_PACKAGES = "${PN}" 119USERADD_PACKAGES = "${PN}"
117GROUPADD_PARAM_${PN} = "-r lock" 120GROUPADD_PARAM_${PN} = "-r lock; -r systemd-journal"
118 121
119FILES_${PN}-analyze = "${base_bindir}/systemd-analyze" 122FILES_${PN}-analyze = "${base_bindir}/systemd-analyze"
120 123
@@ -224,7 +227,7 @@ FILES_udev += "${base_sbindir}/udevd \
224FILES_udev-consolekit += "/lib/ConsoleKit" 227FILES_udev-consolekit += "/lib/ConsoleKit"
225RDEPENDS_udev-consolekit += "${@base_contains('DISTRO_FEATURES', 'x11', 'consolekit', '', d)}" 228RDEPENDS_udev-consolekit += "${@base_contains('DISTRO_FEATURES', 'x11', 'consolekit', '', d)}"
226 229
227FILES_udev-utils = "${bindir}/udevadm" 230FILES_udev-utils = "${base_bindir}/udevadm ${datadir}/bash-completion/completions/udevadm"
228 231
229FILES_udev-hwdb = "${base_libdir}/udev/hwdb.d" 232FILES_udev-hwdb = "${base_libdir}/udev/hwdb.d"
230 233