Backport fixes and hwdb changes
Virt patch which had to be backed-out is enabled again, along with the patch to fix the compilation issues.
This commit is contained in:
parent
7d7fbfa3c2
commit
d66047d776
@ -0,0 +1,38 @@
|
||||
From ad792a7d7a407e2bcdf3553290c97d3642fdaf01 Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Tue, 19 Nov 2013 01:13:42 +0100
|
||||
Subject: [PATCH] calendar: support 'yearly' and 'annually' names the same way
|
||||
as cron
|
||||
|
||||
---
|
||||
src/shared/calendarspec.c | 17 +++++++++++++++++
|
||||
1 file changed, 17 insertions(+)
|
||||
|
||||
diff --git a/src/shared/calendarspec.c b/src/shared/calendarspec.c
|
||||
index 7979e23..7075159 100644
|
||||
--- a/src/shared/calendarspec.c
|
||||
+++ b/src/shared/calendarspec.c
|
||||
@@ -686,6 +686,23 @@ int calendar_spec_from_string(const char *p, CalendarSpec **spec) {
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
|
||||
+ } else if (strcaseeq(p, "anually") || strcaseeq(p, "yearly")) {
|
||||
+ r = const_chain(1, &c->month);
|
||||
+ if (r < 0)
|
||||
+ goto fail;
|
||||
+ r = const_chain(1, &c->day);
|
||||
+ if (r < 0)
|
||||
+ goto fail;
|
||||
+ r = const_chain(0, &c->hour);
|
||||
+ if (r < 0)
|
||||
+ goto fail;
|
||||
+ r = const_chain(0, &c->minute);
|
||||
+ if (r < 0)
|
||||
+ goto fail;
|
||||
+ r = const_chain(0, &c->second);
|
||||
+ if (r < 0)
|
||||
+ goto fail;
|
||||
+
|
||||
} else if (strcaseeq(p, "weekly")) {
|
||||
|
||||
c->weekdays_bits = 1;
|
@ -0,0 +1,57 @@
|
||||
From 48335b715e811ba56f7c03199efb85a664762f5d Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Tue, 19 Nov 2013 21:02:59 +0100
|
||||
Subject: [PATCH] hashmap: be a bit more conservative with pre-allocating hash
|
||||
tables and items
|
||||
|
||||
---
|
||||
src/shared/hashmap.c | 9 +++++----
|
||||
1 file changed, 5 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/shared/hashmap.c b/src/shared/hashmap.c
|
||||
index f06fce6..8f5957b 100644
|
||||
--- a/src/shared/hashmap.c
|
||||
+++ b/src/shared/hashmap.c
|
||||
@@ -66,13 +66,14 @@ static void *first_hashmap_tile = NULL;
|
||||
static struct pool *first_entry_pool = NULL;
|
||||
static void *first_entry_tile = NULL;
|
||||
|
||||
-static void* allocate_tile(struct pool **first_pool, void **first_tile, size_t tile_size) {
|
||||
+static void* allocate_tile(struct pool **first_pool, void **first_tile, size_t tile_size, unsigned at_least) {
|
||||
unsigned i;
|
||||
|
||||
/* When a tile is released we add it to the list and simply
|
||||
* place the next pointer at its offset 0. */
|
||||
|
||||
assert(tile_size >= sizeof(void*));
|
||||
+ assert(at_least > 0);
|
||||
|
||||
if (*first_tile) {
|
||||
void *r;
|
||||
@@ -88,7 +89,7 @@ static void* allocate_tile(struct pool **first_pool, void **first_tile, size_t t
|
||||
struct pool *p;
|
||||
|
||||
n = *first_pool ? (*first_pool)->n_tiles : 0;
|
||||
- n = MAX(512U, n * 2);
|
||||
+ n = MAX(at_least, n * 2);
|
||||
size = PAGE_ALIGN(ALIGN(sizeof(struct pool)) + n*tile_size);
|
||||
n = (size - ALIGN(sizeof(struct pool))) / tile_size;
|
||||
|
||||
@@ -191,7 +192,7 @@ Hashmap *hashmap_new(hash_func_t hash_func, compare_func_t compare_func) {
|
||||
size = ALIGN(sizeof(Hashmap)) + INITIAL_N_BUCKETS * sizeof(struct hashmap_entry*);
|
||||
|
||||
if (b) {
|
||||
- h = allocate_tile(&first_hashmap_pool, &first_hashmap_tile, size);
|
||||
+ h = allocate_tile(&first_hashmap_pool, &first_hashmap_tile, size, 8);
|
||||
if (!h)
|
||||
return NULL;
|
||||
|
||||
@@ -476,7 +477,7 @@ int hashmap_put(Hashmap *h, const void *key, void *value) {
|
||||
hash = bucket_hash(h, key);
|
||||
|
||||
if (h->from_pool)
|
||||
- e = allocate_tile(&first_entry_pool, &first_entry_tile, sizeof(struct hashmap_entry));
|
||||
+ e = allocate_tile(&first_entry_pool, &first_entry_tile, sizeof(struct hashmap_entry), 64U);
|
||||
else
|
||||
e = new(struct hashmap_entry, 1);
|
||||
|
26
0118-manager-don-t-do-plymouth-in-a-container.patch
Normal file
26
0118-manager-don-t-do-plymouth-in-a-container.patch
Normal file
@ -0,0 +1,26 @@
|
||||
From c74cf7621353d765a89e800c5a040fefa79e7915 Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Wed, 20 Nov 2013 03:44:11 +0100
|
||||
Subject: [PATCH] manager: don't do plymouth in a container
|
||||
|
||||
Given that plymouth listens on an abstract namespace socket and if
|
||||
CLONE_NEWNET is not used the abstract namespace is shared with the host
|
||||
we might actually end up send plymouth data to the host.
|
||||
---
|
||||
src/core/manager.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/src/core/manager.c b/src/core/manager.c
|
||||
index ce32baf..944c196 100644
|
||||
--- a/src/core/manager.c
|
||||
+++ b/src/core/manager.c
|
||||
@@ -1966,6 +1966,9 @@ void manager_send_unit_plymouth(Manager *m, Unit *u) {
|
||||
if (m->running_as != SYSTEMD_SYSTEM)
|
||||
return;
|
||||
|
||||
+ if (detect_container(NULL) > 0)
|
||||
+ return;
|
||||
+
|
||||
if (u->type != UNIT_SERVICE &&
|
||||
u->type != UNIT_MOUNT &&
|
||||
u->type != UNIT_SWAP)
|
82
0119-nspawn-add-new-drop-capability-switch.patch
Normal file
82
0119-nspawn-add-new-drop-capability-switch.patch
Normal file
@ -0,0 +1,82 @@
|
||||
From c3f82c64d86432c7d4b0c3abf61b70fd88f1d9dd Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Wed, 20 Nov 2013 22:10:42 +0100
|
||||
Subject: [PATCH] nspawn: add new --drop-capability= switch
|
||||
|
||||
---
|
||||
man/systemd-nspawn.xml | 10 ++++++++++
|
||||
src/nspawn/nspawn.c | 12 ++++++++++--
|
||||
2 files changed, 20 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/man/systemd-nspawn.xml b/man/systemd-nspawn.xml
|
||||
index ba9e516..c1a5cad 100644
|
||||
--- a/man/systemd-nspawn.xml
|
||||
+++ b/man/systemd-nspawn.xml
|
||||
@@ -304,6 +304,16 @@
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
+ <term><option>--drop-capability=</option></term>
|
||||
+
|
||||
+ <listitem><para>Specify one or more
|
||||
+ additional capabilities to drop for
|
||||
+ the container. This allows running the
|
||||
+ container with fewer capabilities than
|
||||
+ the default (see above).</para></listitem>
|
||||
+ </varlistentry>
|
||||
+
|
||||
+ <varlistentry>
|
||||
<term><option>--link-journal=</option></term>
|
||||
|
||||
<listitem><para>Control whether the
|
||||
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
|
||||
index 85bbadf..7346253 100644
|
||||
--- a/src/nspawn/nspawn.c
|
||||
+++ b/src/nspawn/nspawn.c
|
||||
@@ -130,6 +130,7 @@ static int help(void) {
|
||||
" --read-only Mount the root directory read-only\n"
|
||||
" --capability=CAP In addition to the default, retain specified\n"
|
||||
" capability\n"
|
||||
+ " --drop-capability=CAP Drop the specified capability from the default set\n"
|
||||
" --link-journal=MODE Link up guest journal, one of no, auto, guest, host\n"
|
||||
" -j Equivalent to --link-journal=host\n"
|
||||
" --bind=PATH[:PATH] Bind mount a file or directory from the host into\n"
|
||||
@@ -148,6 +149,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
ARG_UUID,
|
||||
ARG_READ_ONLY,
|
||||
ARG_CAPABILITY,
|
||||
+ ARG_DROP_CAPABILITY,
|
||||
ARG_LINK_JOURNAL,
|
||||
ARG_BIND,
|
||||
ARG_BIND_RO
|
||||
@@ -163,6 +165,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
{ "uuid", required_argument, NULL, ARG_UUID },
|
||||
{ "read-only", no_argument, NULL, ARG_READ_ONLY },
|
||||
{ "capability", required_argument, NULL, ARG_CAPABILITY },
|
||||
+ { "drop-capability", required_argument, NULL, ARG_DROP_CAPABILITY },
|
||||
{ "link-journal", required_argument, NULL, ARG_LINK_JOURNAL },
|
||||
{ "bind", required_argument, NULL, ARG_BIND },
|
||||
{ "bind-ro", required_argument, NULL, ARG_BIND_RO },
|
||||
@@ -247,7 +250,8 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
arg_read_only = true;
|
||||
break;
|
||||
|
||||
- case ARG_CAPABILITY: {
|
||||
+ case ARG_CAPABILITY:
|
||||
+ case ARG_DROP_CAPABILITY: {
|
||||
char *state, *word;
|
||||
size_t length;
|
||||
|
||||
@@ -266,7 +270,11 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
}
|
||||
|
||||
free(t);
|
||||
- arg_retain |= 1ULL << (uint64_t) cap;
|
||||
+
|
||||
+ if (c == ARG_CAPABILITY)
|
||||
+ arg_retain |= 1ULL << (uint64_t) cap;
|
||||
+ else
|
||||
+ arg_retain &= ~(1ULL << (uint64_t) cap);
|
||||
}
|
||||
|
||||
break;
|
59
0120-valgrind-make-running-PID-1-in-valgrind-useful.patch
Normal file
59
0120-valgrind-make-running-PID-1-in-valgrind-useful.patch
Normal file
@ -0,0 +1,59 @@
|
||||
From 246592d8f7eaf899ec6292cac4985f7bcc8b65fd Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Wed, 20 Nov 2013 22:11:10 +0100
|
||||
Subject: [PATCH] valgrind: make running PID 1 in valgrind useful
|
||||
|
||||
Since valgrind only generates useful output on exit() (rather than
|
||||
exec()) we need to explicitly exit when valgrind is detected.
|
||||
|
||||
Conflicts:
|
||||
src/core/main.c
|
||||
---
|
||||
configure.ac | 2 +-
|
||||
src/core/main.c | 13 +++++++++++++
|
||||
2 files changed, 14 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 9904e25..6232cf8 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -814,7 +814,7 @@ AC_DEFINE_UNQUOTED(TELINIT, ["$TELINIT"], [Path to telinit])
|
||||
|
||||
AC_SUBST(TELINIT)
|
||||
|
||||
-AC_CHECK_HEADERS_ONCE([valgrind/memcheck.h])
|
||||
+AC_CHECK_HEADERS_ONCE([valgrind/memcheck.h valgrind/valgrind.h])
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
have_myhostname=no
|
||||
diff --git a/src/core/main.c b/src/core/main.c
|
||||
index 00fd394..58c3a9e 100644
|
||||
--- a/src/core/main.c
|
||||
+++ b/src/core/main.c
|
||||
@@ -34,6 +34,10 @@
|
||||
#include <sys/prctl.h>
|
||||
#include <sys/mount.h>
|
||||
|
||||
+#ifdef HAVE_VALGRIND_VALGRIND_H
|
||||
+#include <valgrind/valgrind.h>
|
||||
+#endif
|
||||
+
|
||||
#include "manager.h"
|
||||
#include "log.h"
|
||||
#include "load-fragment.h"
|
||||
@@ -1855,6 +1859,15 @@ finish:
|
||||
if (fds)
|
||||
fdset_free(fds);
|
||||
|
||||
+#ifdef HAVE_VALGRIND_VALGRIND_H
|
||||
+ /* If we are PID 1 and running under valgrind, then let's exit
|
||||
+ * here explicitly. valgrind will only generate nice output on
|
||||
+ * exit(), not on exec(), hence let's do the former not the
|
||||
+ * latter here. */
|
||||
+ if (getpid() == 1 && RUNNING_ON_VALGRIND)
|
||||
+ return 0;
|
||||
+#endif
|
||||
+
|
||||
if (shutdown_verb) {
|
||||
const char * command_line[] = {
|
||||
SYSTEMD_SHUTDOWN_BINARY_PATH,
|
22
0121-efi-boot-generator-don-t-mount-boot-eagerly.patch
Normal file
22
0121-efi-boot-generator-don-t-mount-boot-eagerly.patch
Normal file
@ -0,0 +1,22 @@
|
||||
From 1530d333580859301dc57ca1a602d1ccd9cd594f Mon Sep 17 00:00:00 2001
|
||||
From: Tom Gundersen <teg@jklm.no>
|
||||
Date: Thu, 21 Nov 2013 12:35:46 +0100
|
||||
Subject: [PATCH] efi-boot-generator: don't mount /boot eagerly
|
||||
|
||||
---
|
||||
src/efi-boot-generator/efi-boot-generator.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/efi-boot-generator/efi-boot-generator.c b/src/efi-boot-generator/efi-boot-generator.c
|
||||
index 05b95ed..5e5c682 100644
|
||||
--- a/src/efi-boot-generator/efi-boot-generator.c
|
||||
+++ b/src/efi-boot-generator/efi-boot-generator.c
|
||||
@@ -82,7 +82,7 @@ int main(int argc, char *argv[]) {
|
||||
"[Mount]\n"
|
||||
"Where=/boot\n"
|
||||
"What=/dev/disk/by-partuuid/%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x\n"
|
||||
- "Options=umask=0077\n",
|
||||
+ "Options=umask=0077,noauto\n",
|
||||
SD_ID128_FORMAT_VAL(id));
|
||||
|
||||
free(name);
|
327
0122-hwdb-Update-database-of-Bluetooth-company-identifier.patch
Normal file
327
0122-hwdb-Update-database-of-Bluetooth-company-identifier.patch
Normal file
@ -0,0 +1,327 @@
|
||||
From 542aea95d13a4e88add77b3a473557dc2f47bb61 Mon Sep 17 00:00:00 2001
|
||||
From: Marcel Holtmann <marcel@holtmann.org>
|
||||
Date: Sat, 21 Sep 2013 11:45:05 -0700
|
||||
Subject: [PATCH] hwdb: Update database of Bluetooth company identifiers
|
||||
|
||||
---
|
||||
hwdb/20-bluetooth-vendor-product.hwdb | 209 +++++++++++++++++++++++++++++++---
|
||||
1 file changed, 193 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/hwdb/20-bluetooth-vendor-product.hwdb b/hwdb/20-bluetooth-vendor-product.hwdb
|
||||
index c8cb322..faecf42 100644
|
||||
--- a/hwdb/20-bluetooth-vendor-product.hwdb
|
||||
+++ b/hwdb/20-bluetooth-vendor-product.hwdb
|
||||
@@ -46,7 +46,7 @@ bluetooth:v000D*
|
||||
ID_VENDOR_FROM_DATABASE=Texas Instruments Inc.
|
||||
|
||||
bluetooth:v000E*
|
||||
- ID_VENDOR_FROM_DATABASE=Ceva, Inc. (formerly Parthus Technologies Inc.)
|
||||
+ ID_VENDOR_FROM_DATABASE=Ceva, Inc. (formerly Parthus Technologies, Inc.)
|
||||
|
||||
bluetooth:v000F*
|
||||
ID_VENDOR_FROM_DATABASE=Broadcom Corporation
|
||||
@@ -55,7 +55,7 @@ bluetooth:v0010*
|
||||
ID_VENDOR_FROM_DATABASE=Mitel Semiconductor
|
||||
|
||||
bluetooth:v0011*
|
||||
- ID_VENDOR_FROM_DATABASE=Widcomm, Inc.
|
||||
+ ID_VENDOR_FROM_DATABASE=Widcomm, Inc
|
||||
|
||||
bluetooth:v0012*
|
||||
ID_VENDOR_FROM_DATABASE=Zeevo, Inc.
|
||||
@@ -73,13 +73,13 @@ bluetooth:v0016*
|
||||
ID_VENDOR_FROM_DATABASE=KC Technology Inc.
|
||||
|
||||
bluetooth:v0017*
|
||||
- ID_VENDOR_FROM_DATABASE=Newlogic
|
||||
+ ID_VENDOR_FROM_DATABASE=NewLogic
|
||||
|
||||
bluetooth:v0018*
|
||||
ID_VENDOR_FROM_DATABASE=Transilica, Inc.
|
||||
|
||||
bluetooth:v0019*
|
||||
- ID_VENDOR_FROM_DATABASE=Rohde & Schwartz GmbH & Co. KG
|
||||
+ ID_VENDOR_FROM_DATABASE=Rohde & Schwarz GmbH & Co. KG
|
||||
|
||||
bluetooth:v001A*
|
||||
ID_VENDOR_FROM_DATABASE=TTPCom Limited
|
||||
@@ -151,7 +151,7 @@ bluetooth:v0030*
|
||||
ID_VENDOR_FROM_DATABASE=ST Microelectronics
|
||||
|
||||
bluetooth:v0031*
|
||||
- ID_VENDOR_FROM_DATABASE=Synopsys
|
||||
+ ID_VENDOR_FROM_DATABASE=Synopsis
|
||||
|
||||
bluetooth:v0032*
|
||||
ID_VENDOR_FROM_DATABASE=Red-M (Communications) Ltd
|
||||
@@ -190,16 +190,16 @@ bluetooth:v003D*
|
||||
ID_VENDOR_FROM_DATABASE=IPextreme, Inc.
|
||||
|
||||
bluetooth:v003E*
|
||||
- ID_VENDOR_FROM_DATABASE=Systems and Chips, Inc
|
||||
+ ID_VENDOR_FROM_DATABASE=Systems and Chips, Inc.
|
||||
|
||||
bluetooth:v003F*
|
||||
- ID_VENDOR_FROM_DATABASE=Bluetooth SIG, Inc
|
||||
+ ID_VENDOR_FROM_DATABASE=Bluetooth SIG, Inc.
|
||||
|
||||
bluetooth:v0040*
|
||||
ID_VENDOR_FROM_DATABASE=Seiko Epson Corporation
|
||||
|
||||
bluetooth:v0041*
|
||||
- ID_VENDOR_FROM_DATABASE=Integrated Silicon Solution Taiwain, Inc.
|
||||
+ ID_VENDOR_FROM_DATABASE=Integrated Silicon Solution Taiwan, Inc.
|
||||
|
||||
bluetooth:v0042*
|
||||
ID_VENDOR_FROM_DATABASE=CONWISE Technology Corporation Ltd
|
||||
@@ -244,7 +244,7 @@ bluetooth:v004F*
|
||||
ID_VENDOR_FROM_DATABASE=APT Licensing Ltd.
|
||||
|
||||
bluetooth:v0050*
|
||||
- ID_VENDOR_FROM_DATABASE=SiRF Technology, Inc.
|
||||
+ ID_VENDOR_FROM_DATABASE=SiRF Technology
|
||||
|
||||
bluetooth:v0051*
|
||||
ID_VENDOR_FROM_DATABASE=Tzero Technologies, Inc.
|
||||
@@ -379,7 +379,7 @@ bluetooth:v007C*
|
||||
ID_VENDOR_FROM_DATABASE=A & R Cambridge
|
||||
|
||||
bluetooth:v007D*
|
||||
- ID_VENDOR_FROM_DATABASE=Seers Technology Co. Ltd.
|
||||
+ ID_VENDOR_FROM_DATABASE=Seers Technology Co. Ltd
|
||||
|
||||
bluetooth:v007E*
|
||||
ID_VENDOR_FROM_DATABASE=Sports Tracking Technologies Ltd.
|
||||
@@ -406,7 +406,7 @@ bluetooth:v0085*
|
||||
ID_VENDOR_FROM_DATABASE=BlueRadios, Inc.
|
||||
|
||||
bluetooth:v0086*
|
||||
- ID_VENDOR_FROM_DATABASE=equinux AG
|
||||
+ ID_VENDOR_FROM_DATABASE=equinox AG
|
||||
|
||||
bluetooth:v0087*
|
||||
ID_VENDOR_FROM_DATABASE=Garmin International, Inc.
|
||||
@@ -421,7 +421,7 @@ bluetooth:v008A*
|
||||
ID_VENDOR_FROM_DATABASE=Jawbone
|
||||
|
||||
bluetooth:v008B*
|
||||
- ID_VENDOR_FROM_DATABASE=Topcon Positioning Systems, LLC
|
||||
+ ID_VENDOR_FROM_DATABASE=Topcorn Positioning Systems, LLC
|
||||
|
||||
bluetooth:v008C*
|
||||
ID_VENDOR_FROM_DATABASE=Qualcomm Labs, Inc.
|
||||
@@ -433,13 +433,13 @@ bluetooth:v008E*
|
||||
ID_VENDOR_FROM_DATABASE=Quintic Corp.
|
||||
|
||||
bluetooth:v008F*
|
||||
- ID_VENDOR_FROM_DATABASE=Stollmann E+V GmbH
|
||||
+ ID_VENDOR_FROM_DATABASE=Stollman E+V GmbH
|
||||
|
||||
bluetooth:v0090*
|
||||
ID_VENDOR_FROM_DATABASE=Funai Electric Co., Ltd.
|
||||
|
||||
bluetooth:v0091*
|
||||
- ID_VENDOR_FROM_DATABASE=Advanced PANMOBIL systems GmbH & Co. KG
|
||||
+ ID_VENDOR_FROM_DATABASE=Advanced PANMOBIL Systems GmbH & Co. KG
|
||||
|
||||
bluetooth:v0092*
|
||||
ID_VENDOR_FROM_DATABASE=ThinkOptics, Inc.
|
||||
@@ -460,7 +460,7 @@ bluetooth:v0097*
|
||||
ID_VENDOR_FROM_DATABASE=Bluetrek Technologies Limited
|
||||
|
||||
bluetooth:v0098*
|
||||
- ID_VENDOR_FROM_DATABASE=zero1.tv GmbH
|
||||
+ ID_VENDOR_FROM_DATABASE=zer01.tv GmbH
|
||||
|
||||
bluetooth:v0099*
|
||||
ID_VENDOR_FROM_DATABASE=i.Tech Dynamic Global Distribution Ltd.
|
||||
@@ -511,7 +511,7 @@ bluetooth:v00A8*
|
||||
ID_VENDOR_FROM_DATABASE=ARP Devices Limited
|
||||
|
||||
bluetooth:v00A9*
|
||||
- ID_VENDOR_FROM_DATABASE=Magneti Marelli S.p.A.
|
||||
+ ID_VENDOR_FROM_DATABASE=Magneti Marelli S.p.A
|
||||
|
||||
bluetooth:v00AA*
|
||||
ID_VENDOR_FROM_DATABASE=CAEN RFID srl
|
||||
@@ -539,3 +539,180 @@ bluetooth:v00B1*
|
||||
|
||||
bluetooth:v00B2*
|
||||
ID_VENDOR_FROM_DATABASE=Bekey A/S
|
||||
+
|
||||
+bluetooth:v00B3*
|
||||
+ ID_VENDOR_FROM_DATABASE=Clarinox Technologies Pty. Ltd.
|
||||
+
|
||||
+bluetooth:v00B4*
|
||||
+ ID_VENDOR_FROM_DATABASE=BDE Technology Co., Ltd.
|
||||
+
|
||||
+bluetooth:v00B5*
|
||||
+ ID_VENDOR_FROM_DATABASE=Swirl Networks
|
||||
+
|
||||
+bluetooth:v00B6*
|
||||
+ ID_VENDOR_FROM_DATABASE=Meso international
|
||||
+
|
||||
+bluetooth:v00B7*
|
||||
+ ID_VENDOR_FROM_DATABASE=TreLab Ltd
|
||||
+
|
||||
+bluetooth:v00B8*
|
||||
+ ID_VENDOR_FROM_DATABASE=Qualcomm Innovation Center, Inc. (QuIC)
|
||||
+
|
||||
+bluetooth:v00B9*
|
||||
+ ID_VENDOR_FROM_DATABASE=Johnson Controls, Inc.
|
||||
+
|
||||
+bluetooth:v00BA*
|
||||
+ ID_VENDOR_FROM_DATABASE=Starkey Laboratories Inc.
|
||||
+
|
||||
+bluetooth:v00BB*
|
||||
+ ID_VENDOR_FROM_DATABASE=S-Power Electronics Limited
|
||||
+
|
||||
+bluetooth:v00BC*
|
||||
+ ID_VENDOR_FROM_DATABASE=Ace Sensor Inc
|
||||
+
|
||||
+bluetooth:v00BD*
|
||||
+ ID_VENDOR_FROM_DATABASE=Aplix Corporation
|
||||
+
|
||||
+bluetooth:v00BE*
|
||||
+ ID_VENDOR_FROM_DATABASE=AAMP of America
|
||||
+
|
||||
+bluetooth:v00BF*
|
||||
+ ID_VENDOR_FROM_DATABASE=Stalmart Technology Limited
|
||||
+
|
||||
+bluetooth:v00C0*
|
||||
+ ID_VENDOR_FROM_DATABASE=AMICCOM Electronics Corporation
|
||||
+
|
||||
+bluetooth:v00C1*
|
||||
+ ID_VENDOR_FROM_DATABASE=Shenzhen Excelsecu Data Technology Co.,Ltd
|
||||
+
|
||||
+bluetooth:v00C2*
|
||||
+ ID_VENDOR_FROM_DATABASE=Geneq Inc.
|
||||
+
|
||||
+bluetooth:v00C3*
|
||||
+ ID_VENDOR_FROM_DATABASE=adidas AG
|
||||
+
|
||||
+bluetooth:v00C4*
|
||||
+ ID_VENDOR_FROM_DATABASE=LG Electronics
|
||||
+
|
||||
+bluetooth:v00C5*
|
||||
+ ID_VENDOR_FROM_DATABASE=Onset Computer Corporation
|
||||
+
|
||||
+bluetooth:v00C6*
|
||||
+ ID_VENDOR_FROM_DATABASE=Selfly BV
|
||||
+
|
||||
+bluetooth:v00C7*
|
||||
+ ID_VENDOR_FROM_DATABASE=Quuppa Oy.
|
||||
+
|
||||
+bluetooth:v00C8*
|
||||
+ ID_VENDOR_FROM_DATABASE=GeLo Inc
|
||||
+
|
||||
+bluetooth:v00C9*
|
||||
+ ID_VENDOR_FROM_DATABASE=Evluma
|
||||
+
|
||||
+bluetooth:v00CA*
|
||||
+ ID_VENDOR_FROM_DATABASE=MC10
|
||||
+
|
||||
+bluetooth:v00CB*
|
||||
+ ID_VENDOR_FROM_DATABASE=Binauric SE
|
||||
+
|
||||
+bluetooth:v00CC*
|
||||
+ ID_VENDOR_FROM_DATABASE=Beats Electronics
|
||||
+
|
||||
+bluetooth:v00CD*
|
||||
+ ID_VENDOR_FROM_DATABASE=Microchip Technology Inc.
|
||||
+
|
||||
+bluetooth:v00CE*
|
||||
+ ID_VENDOR_FROM_DATABASE=Elgato Systems GmbH
|
||||
+
|
||||
+bluetooth:v00CF*
|
||||
+ ID_VENDOR_FROM_DATABASE=ARCHOS SA
|
||||
+
|
||||
+bluetooth:v00D1*
|
||||
+ ID_VENDOR_FROM_DATABASE=Polar Electro Europe B.V.
|
||||
+
|
||||
+bluetooth:v00D2*
|
||||
+ ID_VENDOR_FROM_DATABASE=Dialog Semiconductor B.V.
|
||||
+
|
||||
+bluetooth:v00D3*
|
||||
+ ID_VENDOR_FROM_DATABASE=Taixingbang Technology (HK) Co,. LTD.
|
||||
+
|
||||
+bluetooth:v00D4*
|
||||
+ ID_VENDOR_FROM_DATABASE=Kawantech
|
||||
+
|
||||
+bluetooth:v00D5*
|
||||
+ ID_VENDOR_FROM_DATABASE=Austco Communication Systems
|
||||
+
|
||||
+bluetooth:v00D6*
|
||||
+ ID_VENDOR_FROM_DATABASE=Timex Group USA, Inc.
|
||||
+
|
||||
+bluetooth:v00D7*
|
||||
+ ID_VENDOR_FROM_DATABASE=Qualcomm Technologies, Inc.
|
||||
+
|
||||
+bluetooth:v00D8*
|
||||
+ ID_VENDOR_FROM_DATABASE=Qualcomm Connected Experiences, Inc.
|
||||
+
|
||||
+bluetooth:v00D9*
|
||||
+ ID_VENDOR_FROM_DATABASE=Voyetra Turtle Beach
|
||||
+
|
||||
+bluetooth:v00DA*
|
||||
+ ID_VENDOR_FROM_DATABASE=txtr GmbH
|
||||
+
|
||||
+bluetooth:v00DB*
|
||||
+ ID_VENDOR_FROM_DATABASE=Biosentronics
|
||||
+
|
||||
+bluetooth:v00DC*
|
||||
+ ID_VENDOR_FROM_DATABASE=Procter & Gamble
|
||||
+
|
||||
+bluetooth:v00DD*
|
||||
+ ID_VENDOR_FROM_DATABASE=Hosiden Corporation
|
||||
+
|
||||
+bluetooth:v00DE*
|
||||
+ ID_VENDOR_FROM_DATABASE=Muzik LLC
|
||||
+
|
||||
+bluetooth:v00DF*
|
||||
+ ID_VENDOR_FROM_DATABASE=Misfit Wearables Corp
|
||||
+
|
||||
+bluetooth:v00E0*
|
||||
+ ID_VENDOR_FROM_DATABASE=Google
|
||||
+
|
||||
+bluetooth:v00E1*
|
||||
+ ID_VENDOR_FROM_DATABASE=Danlers Ltd
|
||||
+
|
||||
+bluetooth:v00E2*
|
||||
+ ID_VENDOR_FROM_DATABASE=Semilink Inc
|
||||
+
|
||||
+bluetooth:v00E3*
|
||||
+ ID_VENDOR_FROM_DATABASE=inMusic Brands, Inc
|
||||
+
|
||||
+bluetooth:v00E4*
|
||||
+ ID_VENDOR_FROM_DATABASE=L.S. Research Inc.
|
||||
+
|
||||
+bluetooth:v00E5*
|
||||
+ ID_VENDOR_FROM_DATABASE=Eden Software Consultants Ltd.
|
||||
+
|
||||
+bluetooth:v00E6*
|
||||
+ ID_VENDOR_FROM_DATABASE=Freshtemp
|
||||
+
|
||||
+bluetooth:v00E7*
|
||||
+ ID_VENDOR_FROM_DATABASE=KS Technologies
|
||||
+
|
||||
+bluetooth:v00E8*
|
||||
+ ID_VENDOR_FROM_DATABASE=ACTS Technologies
|
||||
+
|
||||
+bluetooth:v00E9*
|
||||
+ ID_VENDOR_FROM_DATABASE=Vtrack Systems
|
||||
+
|
||||
+bluetooth:v00EA*
|
||||
+ ID_VENDOR_FROM_DATABASE=Nielsen-Kellerman Company
|
||||
+
|
||||
+bluetooth:v00EB*
|
||||
+ ID_VENDOR_FROM_DATABASE=Server Technology, Inc.
|
||||
+
|
||||
+bluetooth:v00EC*
|
||||
+ ID_VENDOR_FROM_DATABASE=BioResearch Associates
|
||||
+
|
||||
+bluetooth:v00ED*
|
||||
+ ID_VENDOR_FROM_DATABASE=Jolly Logic, LLC
|
||||
+
|
||||
+bluetooth:v00EE*
|
||||
+ ID_VENDOR_FROM_DATABASE=Above Average Outcomes, Inc.
|
@ -0,0 +1,81 @@
|
||||
From c0658e1948c301177b1527227be0c18932cd7cce Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Tue, 26 Nov 2013 18:39:42 +0100
|
||||
Subject: [PATCH] journal: when appending to journal file, allocate larger
|
||||
blocks at once
|
||||
|
||||
(cherry picked from commit a676e66535e12458ea6d366a653f8dd60f982504)
|
||||
|
||||
Conflicts:
|
||||
src/journal/journal-file.c
|
||||
---
|
||||
src/journal/journal-file.c | 26 +++++++++++++++++---------
|
||||
1 file changed, 17 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
|
||||
index 425e38a..d1b8433 100644
|
||||
--- a/src/journal/journal-file.c
|
||||
+++ b/src/journal/journal-file.c
|
||||
@@ -68,6 +68,9 @@
|
||||
/* How many entries to keep in the entry array chain cache at max */
|
||||
#define CHAIN_CACHE_MAX 20
|
||||
|
||||
+/* How much to increase the journal file size at once each time we allocate something new. */
|
||||
+#define FILE_SIZE_INCREASE (8ULL*1024ULL*1024ULL) /* 8MB */
|
||||
+
|
||||
int journal_file_set_online(JournalFile *f) {
|
||||
assert(f);
|
||||
|
||||
@@ -218,8 +221,7 @@ static int journal_file_refresh_header(JournalFile *f) {
|
||||
journal_file_set_online(f);
|
||||
|
||||
/* Sync the online state to disk */
|
||||
- msync(f->header, PAGE_ALIGN(sizeof(Header)), MS_SYNC);
|
||||
- fdatasync(f->fd);
|
||||
+ fsync(f->fd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -313,7 +315,7 @@ static int journal_file_verify_header(JournalFile *f) {
|
||||
}
|
||||
|
||||
static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size) {
|
||||
- uint64_t old_size, new_size;
|
||||
+ uint64_t old_size, new_size, file_size;
|
||||
int r;
|
||||
|
||||
assert(f);
|
||||
@@ -333,12 +335,10 @@ static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size)
|
||||
if (new_size <= old_size)
|
||||
return 0;
|
||||
|
||||
- if (f->metrics.max_size > 0 &&
|
||||
- new_size > f->metrics.max_size)
|
||||
+ if (f->metrics.max_size > 0 && new_size > f->metrics.max_size)
|
||||
return -E2BIG;
|
||||
|
||||
- if (new_size > f->metrics.min_size &&
|
||||
- f->metrics.keep_free > 0) {
|
||||
+ if (new_size > f->metrics.min_size && f->metrics.keep_free > 0) {
|
||||
struct statvfs svfs;
|
||||
|
||||
if (fstatvfs(f->fd, &svfs) >= 0) {
|
||||
@@ -363,8 +363,16 @@ static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size)
|
||||
if (r != 0)
|
||||
return -r;
|
||||
|
||||
- if (fstat(f->fd, &f->last_stat) < 0)
|
||||
- return -errno;
|
||||
+ /* Increase the file size a bit further than this, so that we
|
||||
+ * we can create larger memory maps to cache */
|
||||
+ file_size = ((new_size+FILE_SIZE_INCREASE-1) / FILE_SIZE_INCREASE) * FILE_SIZE_INCREASE;
|
||||
+ if (file_size > (uint64_t) f->last_stat.st_size) {
|
||||
+ if (file_size > new_size)
|
||||
+ ftruncate(f->fd, file_size);
|
||||
+
|
||||
+ if (fstat(f->fd, &f->last_stat) < 0)
|
||||
+ return -errno;
|
||||
+ }
|
||||
|
||||
f->header->arena_size = htole64(new_size - le64toh(f->header->header_size));
|
||||
|
44
0124-journal-make-table-const.patch
Normal file
44
0124-journal-make-table-const.patch
Normal file
@ -0,0 +1,44 @@
|
||||
From 1ae9614a4373029f3f2464cf4d8e61641f1a50a6 Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Tue, 26 Nov 2013 18:40:23 +0100
|
||||
Subject: [PATCH] journal: make table const
|
||||
|
||||
(cherry picked from commit b8e891e699e1336c5527f8203e4e8f67c9bbeb84)
|
||||
---
|
||||
src/journal/journal-file.c | 2 +-
|
||||
src/journal/journal-file.h | 8 ++++----
|
||||
2 files changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
|
||||
index d1b8433..d3bdaea 100644
|
||||
--- a/src/journal/journal-file.c
|
||||
+++ b/src/journal/journal-file.c
|
||||
@@ -401,7 +401,7 @@ static int journal_file_move_to(JournalFile *f, int context, bool keep_always, u
|
||||
|
||||
static uint64_t minimum_header_size(Object *o) {
|
||||
|
||||
- static uint64_t table[] = {
|
||||
+ static const uint64_t table[] = {
|
||||
[OBJECT_DATA] = sizeof(DataObject),
|
||||
[OBJECT_FIELD] = sizeof(FieldObject),
|
||||
[OBJECT_ENTRY] = sizeof(EntryObject),
|
||||
diff --git a/src/journal/journal-file.h b/src/journal/journal-file.h
|
||||
index 5cc2c2d..50bdb67 100644
|
||||
--- a/src/journal/journal-file.h
|
||||
+++ b/src/journal/journal-file.h
|
||||
@@ -54,11 +54,11 @@ typedef struct JournalFile {
|
||||
|
||||
int flags;
|
||||
int prot;
|
||||
- bool writable;
|
||||
- bool compress;
|
||||
- bool seal;
|
||||
+ bool writable:1;
|
||||
+ bool compress:1;
|
||||
+ bool seal:1;
|
||||
|
||||
- bool tail_entry_monotonic_valid;
|
||||
+ bool tail_entry_monotonic_valid:1;
|
||||
|
||||
direction_t last_direction;
|
||||
|
@ -0,0 +1,92 @@
|
||||
From dd186998dd408c54ffe30df1cc35422e645e0ca2 Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Tue, 26 Nov 2013 18:58:44 +0100
|
||||
Subject: [PATCH] journald: keep statistics on how of we hit/miss the mmap
|
||||
cache
|
||||
|
||||
(cherry picked from commit bf807d4dbf27c783db8dfd7f4eca321ae4be5b00)
|
||||
---
|
||||
src/journal/mmap-cache.c | 25 +++++++++++++++++++++++--
|
||||
src/journal/mmap-cache.h | 3 +++
|
||||
src/journal/sd-journal.c | 4 +++-
|
||||
3 files changed, 29 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/journal/mmap-cache.c b/src/journal/mmap-cache.c
|
||||
index 03b57be..42a8a7d 100644
|
||||
--- a/src/journal/mmap-cache.c
|
||||
+++ b/src/journal/mmap-cache.c
|
||||
@@ -72,6 +72,9 @@ struct MMapCache {
|
||||
int n_ref;
|
||||
unsigned n_windows;
|
||||
|
||||
+ unsigned n_hit, n_missed;
|
||||
+
|
||||
+
|
||||
Hashmap *fds;
|
||||
Hashmap *contexts;
|
||||
|
||||
@@ -542,13 +545,19 @@ int mmap_cache_get(
|
||||
|
||||
/* Check whether the current context is the right one already */
|
||||
r = try_context(m, fd, prot, context, keep_always, offset, size, ret);
|
||||
- if (r != 0)
|
||||
+ if (r != 0) {
|
||||
+ m->n_hit ++;
|
||||
return r;
|
||||
+ }
|
||||
|
||||
/* Search for a matching mmap */
|
||||
r = find_mmap(m, fd, prot, context, keep_always, offset, size, ret);
|
||||
- if (r != 0)
|
||||
+ if (r != 0) {
|
||||
+ m->n_hit ++;
|
||||
return r;
|
||||
+ }
|
||||
+
|
||||
+ m->n_missed++;
|
||||
|
||||
/* Create a new mmap */
|
||||
return add_mmap(m, fd, prot, context, keep_always, offset, size, st, ret);
|
||||
@@ -578,3 +587,15 @@ void mmap_cache_close_context(MMapCache *m, unsigned context) {
|
||||
|
||||
context_free(c);
|
||||
}
|
||||
+
|
||||
+unsigned mmap_cache_get_hit(MMapCache *m) {
|
||||
+ assert(m);
|
||||
+
|
||||
+ return m->n_hit;
|
||||
+}
|
||||
+
|
||||
+unsigned mmap_cache_get_missed(MMapCache *m) {
|
||||
+ assert(m);
|
||||
+
|
||||
+ return m->n_missed;
|
||||
+}
|
||||
diff --git a/src/journal/mmap-cache.h b/src/journal/mmap-cache.h
|
||||
index 0c42fb8..912336d 100644
|
||||
--- a/src/journal/mmap-cache.h
|
||||
+++ b/src/journal/mmap-cache.h
|
||||
@@ -34,3 +34,6 @@ MMapCache* mmap_cache_unref(MMapCache *m);
|
||||
int mmap_cache_get(MMapCache *m, int fd, int prot, unsigned context, bool keep_always, uint64_t offset, size_t size, struct stat *st, void **ret);
|
||||
void mmap_cache_close_fd(MMapCache *m, int fd);
|
||||
void mmap_cache_close_context(MMapCache *m, unsigned context);
|
||||
+
|
||||
+unsigned mmap_cache_get_hit(MMapCache *m);
|
||||
+unsigned mmap_cache_get_missed(MMapCache *m);
|
||||
diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c
|
||||
index 9676f0f..52abbe9 100644
|
||||
--- a/src/journal/sd-journal.c
|
||||
+++ b/src/journal/sd-journal.c
|
||||
@@ -1831,8 +1831,10 @@ _public_ void sd_journal_close(sd_journal *j) {
|
||||
if (j->inotify_fd >= 0)
|
||||
close_nointr_nofail(j->inotify_fd);
|
||||
|
||||
- if (j->mmap)
|
||||
+ if (j->mmap) {
|
||||
+ log_debug("mmap cache statistics: %u hit, %u miss", mmap_cache_get_hit(j->mmap), mmap_cache_get_missed(j->mmap));
|
||||
mmap_cache_unref(j->mmap);
|
||||
+ }
|
||||
|
||||
free(j->path);
|
||||
free(j->unique_field);
|
246
0126-journal-optimize-bisection-logic-a-bit-by-caching-th.patch
Normal file
246
0126-journal-optimize-bisection-logic-a-bit-by-caching-th.patch
Normal file
@ -0,0 +1,246 @@
|
||||
From a460644e808ed7671e28ef8231ee590317371fed Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Tue, 26 Nov 2013 20:37:53 +0100
|
||||
Subject: [PATCH] journal: optimize bisection logic a bit by caching the last
|
||||
position
|
||||
|
||||
This way we can do a quick restart limiting a bit how wildly we need to
|
||||
jump around during the bisection process.
|
||||
|
||||
(cherry picked from commit f268980d2cee694fa4118a71402a47c316af0425)
|
||||
---
|
||||
src/journal/journal-file.c | 134 +++++++++++++++++++++++++++++++++------------
|
||||
1 file changed, 99 insertions(+), 35 deletions(-)
|
||||
|
||||
diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
|
||||
index d3bdaea..02f7554 100644
|
||||
--- a/src/journal/journal-file.c
|
||||
+++ b/src/journal/journal-file.c
|
||||
@@ -1366,6 +1366,7 @@ typedef struct ChainCacheItem {
|
||||
uint64_t array; /* the cached array */
|
||||
uint64_t begin; /* the first item in the cached array */
|
||||
uint64_t total; /* the total number of items in all arrays before this one in the chain */
|
||||
+ uint64_t last_index; /* the last index we looked at, to optimize locality when bisecting */
|
||||
} ChainCacheItem;
|
||||
|
||||
static void chain_cache_put(
|
||||
@@ -1374,7 +1375,8 @@ static void chain_cache_put(
|
||||
uint64_t first,
|
||||
uint64_t array,
|
||||
uint64_t begin,
|
||||
- uint64_t total) {
|
||||
+ uint64_t total,
|
||||
+ uint64_t last_index) {
|
||||
|
||||
if (!ci) {
|
||||
/* If the chain item to cache for this chain is the
|
||||
@@ -1402,12 +1404,14 @@ static void chain_cache_put(
|
||||
ci->array = array;
|
||||
ci->begin = begin;
|
||||
ci->total = total;
|
||||
+ ci->last_index = last_index;
|
||||
}
|
||||
|
||||
-static int generic_array_get(JournalFile *f,
|
||||
- uint64_t first,
|
||||
- uint64_t i,
|
||||
- Object **ret, uint64_t *offset) {
|
||||
+static int generic_array_get(
|
||||
+ JournalFile *f,
|
||||
+ uint64_t first,
|
||||
+ uint64_t i,
|
||||
+ Object **ret, uint64_t *offset) {
|
||||
|
||||
Object *o;
|
||||
uint64_t p = 0, a, t = 0;
|
||||
@@ -1448,7 +1452,7 @@ static int generic_array_get(JournalFile *f,
|
||||
|
||||
found:
|
||||
/* Let's cache this item for the next invocation */
|
||||
- chain_cache_put(f->chain_cache, ci, first, a, o->entry_array.items[0], t);
|
||||
+ chain_cache_put(f->chain_cache, ci, first, a, o->entry_array.items[0], t, i);
|
||||
|
||||
r = journal_file_move_to_object(f, OBJECT_ENTRY, p, &o);
|
||||
if (r < 0)
|
||||
@@ -1463,11 +1467,12 @@ found:
|
||||
return 1;
|
||||
}
|
||||
|
||||
-static int generic_array_get_plus_one(JournalFile *f,
|
||||
- uint64_t extra,
|
||||
- uint64_t first,
|
||||
- uint64_t i,
|
||||
- Object **ret, uint64_t *offset) {
|
||||
+static int generic_array_get_plus_one(
|
||||
+ JournalFile *f,
|
||||
+ uint64_t extra,
|
||||
+ uint64_t first,
|
||||
+ uint64_t i,
|
||||
+ Object **ret, uint64_t *offset) {
|
||||
|
||||
Object *o;
|
||||
|
||||
@@ -1498,17 +1503,18 @@ enum {
|
||||
TEST_RIGHT
|
||||
};
|
||||
|
||||
-static int generic_array_bisect(JournalFile *f,
|
||||
- uint64_t first,
|
||||
- uint64_t n,
|
||||
- uint64_t needle,
|
||||
- int (*test_object)(JournalFile *f, uint64_t p, uint64_t needle),
|
||||
- direction_t direction,
|
||||
- Object **ret,
|
||||
- uint64_t *offset,
|
||||
- uint64_t *idx) {
|
||||
-
|
||||
- uint64_t a, p, t = 0, i = 0, last_p = 0;
|
||||
+static int generic_array_bisect(
|
||||
+ JournalFile *f,
|
||||
+ uint64_t first,
|
||||
+ uint64_t n,
|
||||
+ uint64_t needle,
|
||||
+ int (*test_object)(JournalFile *f, uint64_t p, uint64_t needle),
|
||||
+ direction_t direction,
|
||||
+ Object **ret,
|
||||
+ uint64_t *offset,
|
||||
+ uint64_t *idx) {
|
||||
+
|
||||
+ uint64_t a, p, t = 0, i = 0, last_p = 0, last_index = (uint64_t) -1;
|
||||
bool subtract_one = false;
|
||||
Object *o, *array = NULL;
|
||||
int r;
|
||||
@@ -1533,7 +1539,7 @@ static int generic_array_bisect(JournalFile *f,
|
||||
return r;
|
||||
|
||||
if (r == TEST_LEFT) {
|
||||
- /* OK, what we are looking for is right of th
|
||||
+ /* OK, what we are looking for is right of the
|
||||
* begin of this EntryArray, so let's jump
|
||||
* straight to previously cached array in the
|
||||
* chain */
|
||||
@@ -1541,6 +1547,7 @@ static int generic_array_bisect(JournalFile *f,
|
||||
a = ci->array;
|
||||
n -= ci->total;
|
||||
t = ci->total;
|
||||
+ last_index = ci->last_index;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1571,6 +1578,60 @@ static int generic_array_bisect(JournalFile *f,
|
||||
if (r == TEST_RIGHT) {
|
||||
left = 0;
|
||||
right -= 1;
|
||||
+
|
||||
+ if (last_index != (uint64_t) -1) {
|
||||
+ assert(last_index <= right);
|
||||
+
|
||||
+ /* If we cached the last index we
|
||||
+ * looked at, let's try to not to jump
|
||||
+ * too wildly around and see if we can
|
||||
+ * limit the range to look at early to
|
||||
+ * the immediate neighbors of the last
|
||||
+ * index we looked at. */
|
||||
+
|
||||
+ if (last_index > 0) {
|
||||
+ uint64_t x = last_index - 1;
|
||||
+
|
||||
+ p = le64toh(array->entry_array.items[x]);
|
||||
+ if (p <= 0)
|
||||
+ return -EBADMSG;
|
||||
+
|
||||
+ r = test_object(f, p, needle);
|
||||
+ if (r < 0)
|
||||
+ return r;
|
||||
+
|
||||
+ if (r == TEST_FOUND)
|
||||
+ r = direction == DIRECTION_DOWN ? TEST_RIGHT : TEST_LEFT;
|
||||
+
|
||||
+ if (r == TEST_RIGHT)
|
||||
+ right = x;
|
||||
+ else
|
||||
+ left = x + 1;
|
||||
+ }
|
||||
+
|
||||
+ if (last_index < right) {
|
||||
+ uint64_t y = last_index + 1;
|
||||
+
|
||||
+ p = le64toh(array->entry_array.items[y]);
|
||||
+ if (p <= 0)
|
||||
+ return -EBADMSG;
|
||||
+
|
||||
+ r = test_object(f, p, needle);
|
||||
+ if (r < 0)
|
||||
+ return r;
|
||||
+
|
||||
+ if (r == TEST_FOUND)
|
||||
+ r = direction == DIRECTION_DOWN ? TEST_RIGHT : TEST_LEFT;
|
||||
+
|
||||
+ if (r == TEST_RIGHT)
|
||||
+ right = y;
|
||||
+ else
|
||||
+ left = y + 1;
|
||||
+ }
|
||||
+
|
||||
+ last_index = (uint64_t) -1;
|
||||
+ }
|
||||
+
|
||||
for (;;) {
|
||||
if (left == right) {
|
||||
if (direction == DIRECTION_UP)
|
||||
@@ -1581,8 +1642,8 @@ static int generic_array_bisect(JournalFile *f,
|
||||
}
|
||||
|
||||
assert(left < right);
|
||||
-
|
||||
i = (left + right) / 2;
|
||||
+
|
||||
p = le64toh(array->entry_array.items[i]);
|
||||
if (p <= 0)
|
||||
return -EBADMSG;
|
||||
@@ -1615,6 +1676,7 @@ static int generic_array_bisect(JournalFile *f,
|
||||
|
||||
n -= k;
|
||||
t += k;
|
||||
+ last_index = (uint64_t) -1;
|
||||
a = le64toh(array->entry_array.next_entry_array_offset);
|
||||
}
|
||||
|
||||
@@ -1625,7 +1687,7 @@ found:
|
||||
return 0;
|
||||
|
||||
/* Let's cache this item for the next invocation */
|
||||
- chain_cache_put(f->chain_cache, ci, first, a, array->entry_array.items[0], t);
|
||||
+ chain_cache_put(f->chain_cache, ci, first, a, array->entry_array.items[0], t, i + (subtract_one ? -1 : 0));
|
||||
|
||||
if (subtract_one && i == 0)
|
||||
p = last_p;
|
||||
@@ -1650,16 +1712,18 @@ found:
|
||||
return 1;
|
||||
}
|
||||
|
||||
-static int generic_array_bisect_plus_one(JournalFile *f,
|
||||
- uint64_t extra,
|
||||
- uint64_t first,
|
||||
- uint64_t n,
|
||||
- uint64_t needle,
|
||||
- int (*test_object)(JournalFile *f, uint64_t p, uint64_t needle),
|
||||
- direction_t direction,
|
||||
- Object **ret,
|
||||
- uint64_t *offset,
|
||||
- uint64_t *idx) {
|
||||
+
|
||||
+static int generic_array_bisect_plus_one(
|
||||
+ JournalFile *f,
|
||||
+ uint64_t extra,
|
||||
+ uint64_t first,
|
||||
+ uint64_t n,
|
||||
+ uint64_t needle,
|
||||
+ int (*test_object)(JournalFile *f, uint64_t p, uint64_t needle),
|
||||
+ direction_t direction,
|
||||
+ Object **ret,
|
||||
+ uint64_t *offset,
|
||||
+ uint64_t *idx) {
|
||||
|
||||
int r;
|
||||
bool step_back = false;
|
@ -0,0 +1,24 @@
|
||||
From 6ddc0196df2400e440e4bddbcc4ce32c636a7ec1 Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Wed, 27 Nov 2013 00:58:39 +0100
|
||||
Subject: [PATCH] journal: fix iteration when we go backwards from the
|
||||
beginning of an array chain element
|
||||
|
||||
(cherry picked from commit e5462cd80e5328a769137c261c93931ea0c27bab)
|
||||
---
|
||||
src/journal/journal-file.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
|
||||
index 02f7554..4e22e08 100644
|
||||
--- a/src/journal/journal-file.c
|
||||
+++ b/src/journal/journal-file.c
|
||||
@@ -1687,7 +1687,7 @@ found:
|
||||
return 0;
|
||||
|
||||
/* Let's cache this item for the next invocation */
|
||||
- chain_cache_put(f->chain_cache, ci, first, a, array->entry_array.items[0], t, i + (subtract_one ? -1 : 0));
|
||||
+ chain_cache_put(f->chain_cache, ci, first, a, array->entry_array.items[0], t, subtract_one ? (i > 0 ? i-1 : (uint64_t) -1) : i);
|
||||
|
||||
if (subtract_one && i == 0)
|
||||
p = last_p;
|
@ -0,0 +1,26 @@
|
||||
From 00a827da3737dc95c2561292c03468fc96f53f14 Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Wed, 27 Nov 2013 00:59:07 +0100
|
||||
Subject: [PATCH] journal: allow journal_file_copy_entry() to work on non-local
|
||||
files
|
||||
|
||||
(cherry picked from commit 248c78c79c5cca9b981800d816a77591e504066a)
|
||||
---
|
||||
src/journal/journal-file.c | 4 ----
|
||||
1 file changed, 4 deletions(-)
|
||||
|
||||
diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
|
||||
index 4e22e08..e0abddf 100644
|
||||
--- a/src/journal/journal-file.c
|
||||
+++ b/src/journal/journal-file.c
|
||||
@@ -2739,10 +2739,6 @@ int journal_file_copy_entry(JournalFile *from, JournalFile *to, Object *o, uint6
|
||||
ts.monotonic = le64toh(o->entry.monotonic);
|
||||
ts.realtime = le64toh(o->entry.realtime);
|
||||
|
||||
- if (to->tail_entry_monotonic_valid &&
|
||||
- ts.monotonic < le64toh(to->header->tail_entry_monotonic))
|
||||
- return -EINVAL;
|
||||
-
|
||||
n = journal_file_entry_n_items(o);
|
||||
items = alloca(sizeof(EntryItem) * n);
|
||||
|
60
0129-journal-simplify-pre-allocation-logic.patch
Normal file
60
0129-journal-simplify-pre-allocation-logic.patch
Normal file
@ -0,0 +1,60 @@
|
||||
From ab3ada57a761fde9050d7452f6bd9d897b9067ec Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Wed, 27 Nov 2013 01:44:52 +0100
|
||||
Subject: [PATCH] journal: simplify pre-allocation logic
|
||||
|
||||
let's just do a single fallocate() as far as possible, and don't
|
||||
distuingish between allocated space and file size.
|
||||
|
||||
This way we can save a syscall for each append, which makes quite some
|
||||
benefits.
|
||||
|
||||
(cherry picked from commit eda4b58b50509dc8ad0428a46e20f6c5cf516d58)
|
||||
---
|
||||
src/journal/journal-file.c | 19 ++++++++-----------
|
||||
1 file changed, 8 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
|
||||
index e0abddf..090cf97 100644
|
||||
--- a/src/journal/journal-file.c
|
||||
+++ b/src/journal/journal-file.c
|
||||
@@ -315,7 +315,7 @@ static int journal_file_verify_header(JournalFile *f) {
|
||||
}
|
||||
|
||||
static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size) {
|
||||
- uint64_t old_size, new_size, file_size;
|
||||
+ uint64_t old_size, new_size;
|
||||
int r;
|
||||
|
||||
assert(f);
|
||||
@@ -356,6 +356,11 @@ static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size)
|
||||
}
|
||||
}
|
||||
|
||||
+ /* Increase by larger blocks at once */
|
||||
+ new_size = ((new_size+FILE_SIZE_INCREASE-1) / FILE_SIZE_INCREASE) * FILE_SIZE_INCREASE;
|
||||
+ if (f->metrics.max_size > 0 && new_size > f->metrics.max_size)
|
||||
+ new_size = f->metrics.max_size;
|
||||
+
|
||||
/* Note that the glibc fallocate() fallback is very
|
||||
inefficient, hence we try to minimize the allocation area
|
||||
as we can. */
|
||||
@@ -363,16 +368,8 @@ static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size)
|
||||
if (r != 0)
|
||||
return -r;
|
||||
|
||||
- /* Increase the file size a bit further than this, so that we
|
||||
- * we can create larger memory maps to cache */
|
||||
- file_size = ((new_size+FILE_SIZE_INCREASE-1) / FILE_SIZE_INCREASE) * FILE_SIZE_INCREASE;
|
||||
- if (file_size > (uint64_t) f->last_stat.st_size) {
|
||||
- if (file_size > new_size)
|
||||
- ftruncate(f->fd, file_size);
|
||||
-
|
||||
- if (fstat(f->fd, &f->last_stat) < 0)
|
||||
- return -errno;
|
||||
- }
|
||||
+ if (fstat(f->fd, &f->last_stat) < 0)
|
||||
+ return -errno;
|
||||
|
||||
f->header->arena_size = htole64(new_size - le64toh(f->header->header_size));
|
||||
|
@ -0,0 +1,56 @@
|
||||
From f201d0f2ca7adcfcbb854a83ff9a75b40ace7967 Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Wed, 27 Nov 2013 01:54:25 +0100
|
||||
Subject: [PATCH] journald: mention how long we needed to flush to /var in the
|
||||
logs
|
||||
|
||||
(cherry picked from commit fbb634117d0b0ebd5b105e65b141e75ae9af7f8f)
|
||||
---
|
||||
src/journal/journald-server.c | 11 ++++++++++-
|
||||
1 file changed, 10 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
|
||||
index e03e413..a0a8e9c 100644
|
||||
--- a/src/journal/journald-server.c
|
||||
+++ b/src/journal/journald-server.c
|
||||
@@ -968,9 +968,12 @@ static int system_journal_open(Server *s) {
|
||||
}
|
||||
|
||||
int server_flush_to_var(Server *s) {
|
||||
- int r;
|
||||
sd_id128_t machine;
|
||||
sd_journal *j = NULL;
|
||||
+ char ts[FORMAT_TIMESPAN_MAX];
|
||||
+ usec_t start;
|
||||
+ unsigned n = 0;
|
||||
+ int r;
|
||||
|
||||
assert(s);
|
||||
|
||||
@@ -988,6 +991,8 @@ int server_flush_to_var(Server *s) {
|
||||
|
||||
log_debug("Flushing to /var...");
|
||||
|
||||
+ start = now(CLOCK_MONOTONIC);
|
||||
+
|
||||
r = sd_id128_get_machine(&machine);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@@ -1007,6 +1012,8 @@ int server_flush_to_var(Server *s) {
|
||||
f = j->current_file;
|
||||
assert(f && f->current_offset > 0);
|
||||
|
||||
+ n++;
|
||||
+
|
||||
r = journal_file_move_to_object(f, OBJECT_ENTRY, f->current_offset, &o);
|
||||
if (r < 0) {
|
||||
log_error("Can't read entry: %s", strerror(-r));
|
||||
@@ -1050,6 +1057,8 @@ finish:
|
||||
|
||||
sd_journal_close(j);
|
||||
|
||||
+ server_driver_message(s, SD_ID128_NULL, "Time spent on flushing to /var is %s for %u entries.", format_timespan(ts, sizeof(ts), now(CLOCK_MONOTONIC) - start, 0), n);
|
||||
+
|
||||
return r;
|
||||
}
|
||||
|
26
0131-automount-log-info-about-triggering-process.patch
Normal file
26
0131-automount-log-info-about-triggering-process.patch
Normal file
@ -0,0 +1,26 @@
|
||||
From e64e35b2f24f0a2979d435a752d2ab141c5a0cc2 Mon Sep 17 00:00:00 2001
|
||||
From: Kay Sievers <kay@vrfy.org>
|
||||
Date: Thu, 28 Nov 2013 01:25:10 +0100
|
||||
Subject: [PATCH] automount: log info about triggering process
|
||||
|
||||
Conflicts:
|
||||
src/core/automount.c
|
||||
---
|
||||
src/core/automount.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/core/automount.c b/src/core/automount.c
|
||||
index d1379e0..203104e 100644
|
||||
--- a/src/core/automount.c
|
||||
+++ b/src/core/automount.c
|
||||
@@ -776,8 +776,8 @@ static void automount_fd_event(Unit *u, int fd, uint32_t events, Watch *w) {
|
||||
_cleanup_free_ char *p = NULL;
|
||||
|
||||
get_process_comm(packet.v5_packet.pid, &p);
|
||||
- log_debug_unit(u->id,
|
||||
- "Got direct mount request on %s, triggered by %lu (%s)",
|
||||
+ log_info_unit(u->id,
|
||||
+ "Got automount request for %s, triggered by %lu (%s)",
|
||||
a->where, (unsigned long) packet.v5_packet.pid, strna(p));
|
||||
} else
|
||||
log_debug_unit(u->id, "Got direct mount request on %s", a->where);
|
205
0132-virt-split-detect_vm-into-separate-functions.patch
Normal file
205
0132-virt-split-detect_vm-into-separate-functions.patch
Normal file
@ -0,0 +1,205 @@
|
||||
From 4931213c9f9fed23c4a103eda1ee19aa06b9f613 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
||||
Date: Thu, 28 Nov 2013 13:34:08 -0500
|
||||
Subject: [PATCH] virt: split detect_vm into separate functions
|
||||
|
||||
It didn't build on arm. Let's simplify it a bit by
|
||||
splitting x86 specific parts out, which should also make
|
||||
things easier when arm virtualization support is added.
|
||||
---
|
||||
src/shared/virt.c | 140 +++++++++++++++++++++++++++++++-----------------------
|
||||
1 file changed, 81 insertions(+), 59 deletions(-)
|
||||
|
||||
diff --git a/src/shared/virt.c b/src/shared/virt.c
|
||||
index 537ccda..4e18638 100644
|
||||
--- a/src/shared/virt.c
|
||||
+++ b/src/shared/virt.c
|
||||
@@ -27,30 +27,10 @@
|
||||
#include "virt.h"
|
||||
#include "fileio.h"
|
||||
|
||||
-/* Returns a short identifier for the various VM implementations */
|
||||
-int detect_vm(const char **id) {
|
||||
- _cleanup_free_ char *cpuinfo_contents = NULL;
|
||||
- int r;
|
||||
-
|
||||
-#if defined(__i386__) || defined(__x86_64__)
|
||||
+static int detect_vm_cpuid(const char **_id) {
|
||||
|
||||
/* Both CPUID and DMI are x86 specific interfaces... */
|
||||
-
|
||||
- static const char *const dmi_vendors[] = {
|
||||
- "/sys/class/dmi/id/sys_vendor",
|
||||
- "/sys/class/dmi/id/board_vendor",
|
||||
- "/sys/class/dmi/id/bios_vendor"
|
||||
- };
|
||||
-
|
||||
- static const char dmi_vendor_table[] =
|
||||
- "QEMU\0" "qemu\0"
|
||||
- /* http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1009458 */
|
||||
- "VMware\0" "vmware\0"
|
||||
- "VMW\0" "vmware\0"
|
||||
- "Microsoft Corporation\0" "microsoft\0"
|
||||
- "innotek GmbH\0" "oracle\0"
|
||||
- "Xen\0" "xen\0"
|
||||
- "Bochs\0" "bochs\0";
|
||||
+#if defined(__i386__) || defined(__x86_64__)
|
||||
|
||||
static const char cpuid_vendor_table[] =
|
||||
"XenVMMXenVMM\0" "xen\0"
|
||||
@@ -60,40 +40,13 @@ int detect_vm(const char **id) {
|
||||
/* http://msdn.microsoft.com/en-us/library/ff542428.aspx */
|
||||
"Microsoft Hv\0" "microsoft\0";
|
||||
|
||||
- static __thread int cached_found = -1;
|
||||
- static __thread const char *cached_id = NULL;
|
||||
-
|
||||
uint32_t eax, ecx;
|
||||
union {
|
||||
uint32_t sig32[3];
|
||||
char text[13];
|
||||
} sig = {};
|
||||
- unsigned i;
|
||||
const char *j, *k;
|
||||
bool hypervisor;
|
||||
- _cleanup_free_ char *hvtype = NULL;
|
||||
- const char *_id = NULL;
|
||||
-
|
||||
- if (_likely_(cached_found >= 0)) {
|
||||
-
|
||||
- if (id)
|
||||
- *id = cached_id;
|
||||
-
|
||||
- return cached_found;
|
||||
- }
|
||||
-
|
||||
- /* Try high-level hypervisor sysfs file first:
|
||||
- *
|
||||
- * https://bugs.freedesktop.org/show_bug.cgi?id=61491 */
|
||||
- r = read_one_line_file("/sys/hypervisor/type", &hvtype);
|
||||
- if (r >= 0) {
|
||||
- if (streq(hvtype, "xen")) {
|
||||
- _id = "xen";
|
||||
- r = 1;
|
||||
- goto finish;
|
||||
- }
|
||||
- } else if (r != -ENOENT)
|
||||
- return r;
|
||||
|
||||
/* http://lwn.net/Articles/301888/ */
|
||||
|
||||
@@ -136,14 +89,44 @@ int detect_vm(const char **id) {
|
||||
|
||||
NULSTR_FOREACH_PAIR(j, k, cpuid_vendor_table)
|
||||
if (streq(sig.text, j)) {
|
||||
- _id = k;
|
||||
- r = 1;
|
||||
- goto finish;
|
||||
+ *_id = k;
|
||||
+ return 1;
|
||||
}
|
||||
+
|
||||
+ *_id = "other";
|
||||
+ return 0;
|
||||
}
|
||||
+#endif
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int detect_vm_dmi(const char **_id) {
|
||||
+
|
||||
+ /* Both CPUID and DMI are x86 specific interfaces... */
|
||||
+#if defined(__i386__) || defined(__x86_64__)
|
||||
+
|
||||
+ static const char *const dmi_vendors[] = {
|
||||
+ "/sys/class/dmi/id/sys_vendor",
|
||||
+ "/sys/class/dmi/id/board_vendor",
|
||||
+ "/sys/class/dmi/id/bios_vendor"
|
||||
+ };
|
||||
+
|
||||
+ static const char dmi_vendor_table[] =
|
||||
+ "QEMU\0" "qemu\0"
|
||||
+ /* http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1009458 */
|
||||
+ "VMware\0" "vmware\0"
|
||||
+ "VMW\0" "vmware\0"
|
||||
+ "Microsoft Corporation\0" "microsoft\0"
|
||||
+ "innotek GmbH\0" "oracle\0"
|
||||
+ "Xen\0" "xen\0"
|
||||
+ "Bochs\0" "bochs\0";
|
||||
+ unsigned i;
|
||||
|
||||
for (i = 0; i < ELEMENTSOF(dmi_vendors); i++) {
|
||||
_cleanup_free_ char *s = NULL;
|
||||
+ const char *j, *k;
|
||||
+ int r;
|
||||
|
||||
r = read_one_line_file(dmi_vendors[i], &s);
|
||||
if (r < 0) {
|
||||
@@ -155,20 +138,59 @@ int detect_vm(const char **id) {
|
||||
|
||||
NULSTR_FOREACH_PAIR(j, k, dmi_vendor_table)
|
||||
if (startswith(s, j)) {
|
||||
- _id = k;
|
||||
- r = 1;
|
||||
- goto finish;
|
||||
+ *_id = k;
|
||||
+ return 1;
|
||||
}
|
||||
}
|
||||
+#endif
|
||||
|
||||
- if (hypervisor || hvtype) {
|
||||
- _id = "other";
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/* Returns a short identifier for the various VM implementations */
|
||||
+int detect_vm(const char **id) {
|
||||
+ _cleanup_free_ char *hvtype = NULL, *cpuinfo_contents = NULL;
|
||||
+ static __thread int cached_found = -1;
|
||||
+ static __thread const char *cached_id = NULL;
|
||||
+ const char *_id = NULL;
|
||||
+ int r;
|
||||
+
|
||||
+ if (_likely_(cached_found >= 0)) {
|
||||
+
|
||||
+ if (id)
|
||||
+ *id = cached_id;
|
||||
+
|
||||
+ return cached_found;
|
||||
+ }
|
||||
+
|
||||
+ /* Try high-level hypervisor sysfs file first:
|
||||
+ *
|
||||
+ * https://bugs.freedesktop.org/show_bug.cgi?id=61491 */
|
||||
+ r = read_one_line_file("/sys/hypervisor/type", &hvtype);
|
||||
+ if (r >= 0) {
|
||||
+ if (streq(hvtype, "xen")) {
|
||||
+ _id = "xen";
|
||||
+ r = 1;
|
||||
+ goto finish;
|
||||
+ }
|
||||
+ } else if (r != -ENOENT)
|
||||
+ return r;
|
||||
+
|
||||
+ /* this will set _id to "other" and return 0 for unknown hypervisors */
|
||||
+ r = detect_vm_cpuid(&_id);
|
||||
+ if (r != 0)
|
||||
+ goto finish;
|
||||
+
|
||||
+ r = detect_vm_dmi(&_id);
|
||||
+ if (r != 0)
|
||||
+ goto finish;
|
||||
+
|
||||
+ if (_id) {
|
||||
+ /* "other" */
|
||||
r = 1;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
-#endif
|
||||
-
|
||||
/* Detect User-Mode Linux by reading /proc/cpuinfo */
|
||||
r = read_full_file("/proc/cpuinfo", &cpuinfo_contents, NULL);
|
||||
if (r < 0)
|
147
0133-hwdb-Update-database-of-Bluetooth-company-identifier.patch
Normal file
147
0133-hwdb-Update-database-of-Bluetooth-company-identifier.patch
Normal file
@ -0,0 +1,147 @@
|
||||
From 123cc4b594188a5caed955e77228a37001ee451f Mon Sep 17 00:00:00 2001
|
||||
From: Marcel Holtmann <marcel@holtmann.org>
|
||||
Date: Fri, 29 Nov 2013 07:26:47 -0800
|
||||
Subject: [PATCH] hwdb: Update database of Bluetooth company identifiers
|
||||
|
||||
---
|
||||
hwdb/20-bluetooth-vendor-product.hwdb | 109 +++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 107 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/hwdb/20-bluetooth-vendor-product.hwdb b/hwdb/20-bluetooth-vendor-product.hwdb
|
||||
index faecf42..dcc25bb 100644
|
||||
--- a/hwdb/20-bluetooth-vendor-product.hwdb
|
||||
+++ b/hwdb/20-bluetooth-vendor-product.hwdb
|
||||
@@ -366,6 +366,9 @@ bluetooth:v0077*
|
||||
bluetooth:v0078*
|
||||
ID_VENDOR_FROM_DATABASE=Nike, Inc.
|
||||
|
||||
+bluetooth:v0078p0001*
|
||||
+ ID_PRODUCT_FROM_DATABASE=Nike+ FuelBand
|
||||
+
|
||||
bluetooth:v0079*
|
||||
ID_VENDOR_FROM_DATABASE=lesswire AG
|
||||
|
||||
@@ -457,7 +460,7 @@ bluetooth:v0096*
|
||||
ID_VENDOR_FROM_DATABASE=ODM Technology, Inc.
|
||||
|
||||
bluetooth:v0097*
|
||||
- ID_VENDOR_FROM_DATABASE=Bluetrek Technologies Limited
|
||||
+ ID_VENDOR_FROM_DATABASE=ConnecteDevice Ltd.
|
||||
|
||||
bluetooth:v0098*
|
||||
ID_VENDOR_FROM_DATABASE=zer01.tv GmbH
|
||||
@@ -634,7 +637,7 @@ bluetooth:v00D2*
|
||||
ID_VENDOR_FROM_DATABASE=Dialog Semiconductor B.V.
|
||||
|
||||
bluetooth:v00D3*
|
||||
- ID_VENDOR_FROM_DATABASE=Taixingbang Technology (HK) Co,. LTD.
|
||||
+ ID_VENDOR_FROM_DATABASE=Taixingbang Technology (HK) Co,. LTD.
|
||||
|
||||
bluetooth:v00D4*
|
||||
ID_VENDOR_FROM_DATABASE=Kawantech
|
||||
@@ -716,3 +719,105 @@ bluetooth:v00ED*
|
||||
|
||||
bluetooth:v00EE*
|
||||
ID_VENDOR_FROM_DATABASE=Above Average Outcomes, Inc.
|
||||
+
|
||||
+bluetooth:v00EF*
|
||||
+ ID_VENDOR_FROM_DATABASE=Bitsplitters GmbH
|
||||
+
|
||||
+bluetooth:v00F0*
|
||||
+ ID_VENDOR_FROM_DATABASE=PayPal, Inc.
|
||||
+
|
||||
+bluetooth:v00F1*
|
||||
+ ID_VENDOR_FROM_DATABASE=Witron Technology Limited
|
||||
+
|
||||
+bluetooth:v00F2*
|
||||
+ ID_VENDOR_FROM_DATABASE=Morse Project Inc.
|
||||
+
|
||||
+bluetooth:v00F3*
|
||||
+ ID_VENDOR_FROM_DATABASE=Kent Displays Inc.
|
||||
+
|
||||
+bluetooth:v00F4*
|
||||
+ ID_VENDOR_FROM_DATABASE=Nautilus Inc.
|
||||
+
|
||||
+bluetooth:v00F5*
|
||||
+ ID_VENDOR_FROM_DATABASE=Smartifier Oy
|
||||
+
|
||||
+bluetooth:v00F6*
|
||||
+ ID_VENDOR_FROM_DATABASE=Elcometer Limited
|
||||
+
|
||||
+bluetooth:v00F7*
|
||||
+ ID_VENDOR_FROM_DATABASE=VSN Technologies Inc.
|
||||
+
|
||||
+bluetooth:v00F8*
|
||||
+ ID_VENDOR_FROM_DATABASE=AceUni Corp., Ltd.
|
||||
+
|
||||
+bluetooth:v00F9*
|
||||
+ ID_VENDOR_FROM_DATABASE=StickNFind
|
||||
+
|
||||
+bluetooth:v00FA*
|
||||
+ ID_VENDOR_FROM_DATABASE=Crystal Code AB
|
||||
+
|
||||
+bluetooth:v00FB*
|
||||
+ ID_VENDOR_FROM_DATABASE=KOUKAAM a.s.
|
||||
+
|
||||
+bluetooth:v00FC*
|
||||
+ ID_VENDOR_FROM_DATABASE=Delphi Corporation
|
||||
+
|
||||
+bluetooth:v00FD*
|
||||
+ ID_VENDOR_FROM_DATABASE=ValenceTech Limited
|
||||
+
|
||||
+bluetooth:v00FE*
|
||||
+ ID_VENDOR_FROM_DATABASE=Reserved
|
||||
+
|
||||
+bluetooth:v00FF*
|
||||
+ ID_VENDOR_FROM_DATABASE=Typo Products, LLC
|
||||
+
|
||||
+bluetooth:v0100*
|
||||
+ ID_VENDOR_FROM_DATABASE=TomTom International BV
|
||||
+
|
||||
+bluetooth:v0101*
|
||||
+ ID_VENDOR_FROM_DATABASE=Fugoo, Inc
|
||||
+
|
||||
+bluetooth:v0102*
|
||||
+ ID_VENDOR_FROM_DATABASE=Keiser Corporation
|
||||
+
|
||||
+bluetooth:v0103*
|
||||
+ ID_VENDOR_FROM_DATABASE=Bang & Olufsen A/S
|
||||
+
|
||||
+bluetooth:v0104*
|
||||
+ ID_VENDOR_FROM_DATABASE=PLUS Locations Systems Pty Ltd
|
||||
+
|
||||
+bluetooth:v0105*
|
||||
+ ID_VENDOR_FROM_DATABASE=Ubiquitous Computing Technology Corporation
|
||||
+
|
||||
+bluetooth:v0106*
|
||||
+ ID_VENDOR_FROM_DATABASE=Innovative Yachtter Solutions
|
||||
+
|
||||
+bluetooth:v0107*
|
||||
+ ID_VENDOR_FROM_DATABASE=William Demant Holding A/S
|
||||
+
|
||||
+bluetooth:v0108*
|
||||
+ ID_VENDOR_FROM_DATABASE=Chicony Electronics Co., Ltd.
|
||||
+
|
||||
+bluetooth:v0109*
|
||||
+ ID_VENDOR_FROM_DATABASE=Atus BV
|
||||
+
|
||||
+bluetooth:v010A*
|
||||
+ ID_VENDOR_FROM_DATABASE=Codegate Ltd.
|
||||
+
|
||||
+bluetooth:v010B*
|
||||
+ ID_VENDOR_FROM_DATABASE=ERi, Inc.
|
||||
+
|
||||
+bluetooth:v010C*
|
||||
+ ID_VENDOR_FROM_DATABASE=Transducers Direct, LLC
|
||||
+
|
||||
+bluetooth:v010D*
|
||||
+ ID_VENDOR_FROM_DATABASE=Fujitsu Ten Limited
|
||||
+
|
||||
+bluetooth:v010E*
|
||||
+ ID_VENDOR_FROM_DATABASE=Audi AG
|
||||
+
|
||||
+bluetooth:v010F*
|
||||
+ ID_VENDOR_FROM_DATABASE=HiSilicon Technologies Co., Ltd.
|
||||
+
|
||||
+bluetooth:v0110*
|
||||
+ ID_VENDOR_FROM_DATABASE=Nippon Seiki Co., Ltd.
|
23
0134-sysfs-show.c-return-negative-error.patch
Normal file
23
0134-sysfs-show.c-return-negative-error.patch
Normal file
@ -0,0 +1,23 @@
|
||||
From cd0e1552ad5d5dffdd0f8a01fa9b451d3e14a60d Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Hindoe Paaboel Andersen <phomes@gmail.com>
|
||||
Date: Sat, 30 Nov 2013 21:59:40 +0100
|
||||
Subject: [PATCH] sysfs-show.c: return negative error
|
||||
|
||||
introduced in 1ca208fb4f93e5869704af1812cbff7130a2fc03
|
||||
---
|
||||
src/login/sysfs-show.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/login/sysfs-show.c b/src/login/sysfs-show.c
|
||||
index 7c1adfa..f7d11dd 100644
|
||||
--- a/src/login/sysfs-show.c
|
||||
+++ b/src/login/sysfs-show.c
|
||||
@@ -164,7 +164,7 @@ int show_sysfs(const char *seat, const char *prefix, unsigned n_columns) {
|
||||
|
||||
e = udev_enumerate_new(udev);
|
||||
if (!e)
|
||||
- return ENOMEM;
|
||||
+ return -ENOMEM;
|
||||
|
||||
if (!streq(seat, "seat0"))
|
||||
r = udev_enumerate_add_match_tag(e, seat);
|
@ -0,0 +1,28 @@
|
||||
From 05175fd678f6f7f09ff9543cd11bbd7ebf14fe58 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Hindoe Paaboel Andersen <phomes@gmail.com>
|
||||
Date: Sat, 30 Nov 2013 23:45:31 +0100
|
||||
Subject: [PATCH] util.c: check if return value from ttyname_r is > 0 instead
|
||||
of != 0
|
||||
|
||||
We must return a negative error code from getttyname_malloc but
|
||||
that would not be the case if ttyname_r returned a negative value.
|
||||
|
||||
ttyname_r should only return EBADF, ENOTTY, or ERANGE so it should
|
||||
be safe to change.
|
||||
---
|
||||
src/shared/util.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/shared/util.c b/src/shared/util.c
|
||||
index 3fc080a..1510c5e 100644
|
||||
--- a/src/shared/util.c
|
||||
+++ b/src/shared/util.c
|
||||
@@ -2561,7 +2561,7 @@ int getttyname_malloc(int fd, char **r) {
|
||||
assert(r);
|
||||
|
||||
k = ttyname_r(fd, path, sizeof(path));
|
||||
- if (k != 0)
|
||||
+ if (k > 0)
|
||||
return -k;
|
||||
|
||||
char_array_0(path);
|
38
0136-docs-remove-unneeded-the-s-in-gudev-docs.patch
Normal file
38
0136-docs-remove-unneeded-the-s-in-gudev-docs.patch
Normal file
@ -0,0 +1,38 @@
|
||||
From bbf5b0815c2561c3a98903160f3193953ba962c6 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
||||
Date: Sat, 30 Nov 2013 20:27:54 -0500
|
||||
Subject: [PATCH] docs: remove unneeded the's in gudev docs
|
||||
|
||||
https://bugs.freedesktop.org/show_bug.cgi?id=72164
|
||||
---
|
||||
src/libudev/libudev-device.c | 10 ++++------
|
||||
1 file changed, 4 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/libudev/libudev-device.c b/src/libudev/libudev-device.c
|
||||
index a644904..161181a 100644
|
||||
--- a/src/libudev/libudev-device.c
|
||||
+++ b/src/libudev/libudev-device.c
|
||||
@@ -980,9 +980,8 @@ static struct udev_device *device_new_from_parent(struct udev_device *udev_devic
|
||||
* Find the next parent device, and fill in information from the sys
|
||||
* device and the udev database entry.
|
||||
*
|
||||
- * The returned the device is not referenced. It is attached to the
|
||||
- * child device, and will be cleaned up when the child device
|
||||
- * is cleaned up.
|
||||
+ * Returned device is not referenced. It is attached to the child
|
||||
+ * device, and will be cleaned up when the child device is cleaned up.
|
||||
*
|
||||
* It is not necessarily just the upper level directory, empty or not
|
||||
* recognized sys directories are ignored.
|
||||
@@ -1016,9 +1015,8 @@ _public_ struct udev_device *udev_device_get_parent(struct udev_device *udev_dev
|
||||
* If devtype is #NULL, only subsystem is checked, and any devtype will
|
||||
* match.
|
||||
*
|
||||
- * The returned the device is not referenced. It is attached to the
|
||||
- * child device, and will be cleaned up when the child device
|
||||
- * is cleaned up.
|
||||
+ * Returned device is not referenced. It is attached to the child
|
||||
+ * device, and will be cleaned up when the child device is cleaned up.
|
||||
*
|
||||
* It can be called as many times as needed, without caring about
|
||||
* references.
|
235
0137-man-explicitly-say-when-multiple-units-can-be-specif.patch
Normal file
235
0137-man-explicitly-say-when-multiple-units-can-be-specif.patch
Normal file
@ -0,0 +1,235 @@
|
||||
From 06c5b7a9f3d47834ea4dbbfb24f169b6893dd338 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
||||
Date: Sat, 30 Nov 2013 21:23:01 -0500
|
||||
Subject: [PATCH] man: explicitly say when multiple units can be specified
|
||||
|
||||
itistoday> how do you specify multiple dependencies in a unit file? i've been
|
||||
googling and can't find this basic thing :-\
|
||||
itistoday> do you use a comma, or use multiple After= statements?
|
||||
---
|
||||
man/systemd.unit.xml | 128 ++++++++++++++++++++++++++++-----------------------
|
||||
1 file changed, 70 insertions(+), 58 deletions(-)
|
||||
|
||||
diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
|
||||
index 5c8b8e8..029392c 100644
|
||||
--- a/man/systemd.unit.xml
|
||||
+++ b/man/systemd.unit.xml
|
||||
@@ -410,10 +410,12 @@
|
||||
of the other units gets deactivated or
|
||||
its activation fails, this unit will
|
||||
be deactivated. This option may be
|
||||
- specified more than once, in which
|
||||
- case requirement dependencies for all
|
||||
- listed names are created. Note that
|
||||
- requirement dependencies do not
|
||||
+ specified more than once or multiple
|
||||
+ space-separated units may be specified
|
||||
+ in one option in which case
|
||||
+ requirement dependencies for all
|
||||
+ listed names will be created. Note
|
||||
+ that requirement dependencies do not
|
||||
influence the order in which services
|
||||
are started or stopped. This has to be
|
||||
configured independently with the
|
||||
@@ -476,22 +478,23 @@
|
||||
<term><varname>RequisiteOverridable=</varname></term>
|
||||
|
||||
<listitem><para>Similar to
|
||||
- <varname>Requires=</varname>
|
||||
- and <varname>RequiresOverridable=</varname>, respectively. However,
|
||||
- if a unit listed here is not started
|
||||
- already it will not be started and the
|
||||
- transaction fails
|
||||
- immediately.</para></listitem>
|
||||
+ <varname>Requires=</varname> and
|
||||
+ <varname>RequiresOverridable=</varname>,
|
||||
+ respectively. However, if the units
|
||||
+ listed here are not started already
|
||||
+ they will not be started and the
|
||||
+ transaction will fail immediately.
|
||||
+ </para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><varname>Wants=</varname></term>
|
||||
|
||||
<listitem><para>A weaker version of
|
||||
- <varname>Requires=</varname>. A unit
|
||||
+ <varname>Requires=</varname>. Units
|
||||
listed in this option will be started
|
||||
if the configuring unit is. However,
|
||||
- if the listed unit fails to start up
|
||||
+ if the listed units fail to start
|
||||
or cannot be added to the transaction
|
||||
this has no impact on the validity of
|
||||
the transaction as a whole. This is
|
||||
@@ -501,8 +504,8 @@
|
||||
|
||||
<para>Note that dependencies of this
|
||||
type may also be configured outside of
|
||||
- the unit configuration file by
|
||||
- adding a symlink to a
|
||||
+ the unit configuration file by adding
|
||||
+ symlinks to a
|
||||
<filename>.wants/</filename> directory
|
||||
accompanying the unit file. For
|
||||
details see above.</para></listitem>
|
||||
@@ -534,7 +537,7 @@
|
||||
of units. When systemd stops or restarts
|
||||
the units listed here, the action is
|
||||
propagated to this unit.
|
||||
- Note that this is a one way dependency -
|
||||
+ Note that this is a one way dependency —
|
||||
changes to this unit do not affect the
|
||||
listed units.
|
||||
</para></listitem>
|
||||
@@ -543,12 +546,12 @@
|
||||
<varlistentry>
|
||||
<term><varname>Conflicts=</varname></term>
|
||||
|
||||
- <listitem><para>Configures negative
|
||||
+ <listitem><para>A space-separated list
|
||||
+ of unit names. Configures negative
|
||||
requirement dependencies. If a unit
|
||||
- has a
|
||||
- <varname>Conflicts=</varname> setting
|
||||
- on another unit, starting the former
|
||||
- will stop the latter and vice
|
||||
+ has a <varname>Conflicts=</varname>
|
||||
+ setting on another unit, starting the
|
||||
+ former will stop the latter and vice
|
||||
versa. Note that this setting is
|
||||
independent of and orthogonal to the
|
||||
<varname>After=</varname> and
|
||||
@@ -575,7 +578,8 @@
|
||||
<term><varname>Before=</varname></term>
|
||||
<term><varname>After=</varname></term>
|
||||
|
||||
- <listitem><para>Configures ordering
|
||||
+ <listitem><para>A space-separated list
|
||||
+ of unit names. Configures ordering
|
||||
dependencies between units. If a unit
|
||||
<filename>foo.service</filename>
|
||||
contains a setting
|
||||
@@ -624,18 +628,18 @@
|
||||
type <varname>After=</varname> or
|
||||
<varname>Before=</varname>. If two
|
||||
units have no ordering dependencies
|
||||
- between them, they are shut down
|
||||
- or started up simultaneously, and
|
||||
- no ordering takes
|
||||
+ between them, they are shut down or
|
||||
+ started up simultaneously, and no
|
||||
+ ordering takes
|
||||
place. </para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><varname>OnFailure=</varname></term>
|
||||
|
||||
- <listitem><para>Lists one or more
|
||||
- units that are activated when this
|
||||
- unit enters the
|
||||
+ <listitem><para>A space-separated list
|
||||
+ of one or more units that are
|
||||
+ activated when this unit enters the
|
||||
<literal>failed</literal>
|
||||
state.</para></listitem>
|
||||
</varlistentry>
|
||||
@@ -644,16 +648,17 @@
|
||||
<term><varname>PropagatesReloadTo=</varname></term>
|
||||
<term><varname>ReloadPropagatedFrom=</varname></term>
|
||||
|
||||
- <listitem><para>Lists one or more
|
||||
- units where reload requests on the
|
||||
- unit will be propagated to/on the
|
||||
- other unit will be propagated
|
||||
- from. Issuing a reload request on a
|
||||
- unit will automatically also enqueue a
|
||||
- reload request on all units that the
|
||||
- reload request shall be propagated to
|
||||
- via these two
|
||||
- settings.</para></listitem>
|
||||
+ <listitem><para>A space-separated list
|
||||
+ of one or more units where reload
|
||||
+ requests on this unit will be
|
||||
+ propagated to, or reload requests on
|
||||
+ the other unit will be propagated to
|
||||
+ this unit, respectively. Issuing a
|
||||
+ reload request on a unit will
|
||||
+ automatically also enqueue a reload
|
||||
+ request on all units that the reload
|
||||
+ request shall be propagated to via
|
||||
+ these two settings.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
@@ -1089,32 +1094,34 @@
|
||||
<varlistentry>
|
||||
<term><varname>Alias=</varname></term>
|
||||
|
||||
- <listitem><para>Additional names this
|
||||
- unit shall be installed under. The
|
||||
- names listed here must have the same
|
||||
- suffix (i.e. type) as the unit file
|
||||
- name. This option may be specified
|
||||
- more than once, in which case all
|
||||
- listed names are used. At installation
|
||||
- time,
|
||||
- <command>systemctl enable</command>
|
||||
- will create symlinks from these names
|
||||
- to the unit filename.</para></listitem>
|
||||
+ <listitem><para>A space-seperated list
|
||||
+ of additional names this unit shall be
|
||||
+ installed under. The names listed here
|
||||
+ must have the same suffix (i.e. type)
|
||||
+ as the unit file name. This option may
|
||||
+ be specified more than once, in which
|
||||
+ case all listed names are used. At
|
||||
+ installation time, <command>systemctl
|
||||
+ enable</command> will create symlinks
|
||||
+ from these names to the unit
|
||||
+ filename.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><varname>WantedBy=</varname></term>
|
||||
<term><varname>RequiredBy=</varname></term>
|
||||
|
||||
- <listitem><para>A symbolic link is
|
||||
- created in the
|
||||
- <filename>.wants/</filename> or
|
||||
- <filename>.requires/</filename> directory
|
||||
- of the listed unit when this unit is
|
||||
- activated by <command>systemctl
|
||||
- enable</command>. This has the effect
|
||||
- that a dependency of type
|
||||
- <varname>Wants=</varname> or
|
||||
+ <listitem><para>This option may be
|
||||
+ used more than once, or a
|
||||
+ space-separated list of unit names may
|
||||
+ be given. A symbolic link is created
|
||||
+ in the <filename>.wants/</filename> or
|
||||
+ <filename>.requires/</filename>
|
||||
+ directory of each of the listed units
|
||||
+ when this unit is installed by
|
||||
+ <command>systemctl enable</command>.
|
||||
+ This has the effect that a dependency
|
||||
+ of type <varname>Wants=</varname> or
|
||||
<varname>Requires=</varname> is added
|
||||
from the listed unit to the current
|
||||
unit. The primary result is that the
|
||||
@@ -1160,7 +1167,12 @@
|
||||
and <command>systemctl
|
||||
disable</command> will automatically
|
||||
install/uninstall units listed in this option as
|
||||
- well.</para></listitem>
|
||||
+ well.</para>
|
||||
+
|
||||
+ <para>This option may be used more
|
||||
+ than once, or a space-separated list
|
||||
+ of unit names may be
|
||||
+ given.</para></listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
90
0138-systemd-treat-reload-failure-as-failure.patch
Normal file
90
0138-systemd-treat-reload-failure-as-failure.patch
Normal file
@ -0,0 +1,90 @@
|
||||
From 99e4b98b064042a2c1cea103941a7895b183821e Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
||||
Date: Mon, 2 Dec 2013 21:52:51 -0500
|
||||
Subject: [PATCH] systemd: treat reload failure as failure
|
||||
|
||||
systemctl reload "suceeded" on stopped units, but it is documented
|
||||
to fail in this case.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1036845
|
||||
---
|
||||
src/core/job.c | 11 +++++++----
|
||||
src/core/job.h | 3 ++-
|
||||
src/core/unit.c | 5 ++++-
|
||||
3 files changed, 13 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/core/job.c b/src/core/job.c
|
||||
index dc3bc12..7d2b994 100644
|
||||
--- a/src/core/job.c
|
||||
+++ b/src/core/job.c
|
||||
@@ -528,7 +528,7 @@ int job_run_and_invalidate(Job *j) {
|
||||
else if (t == UNIT_ACTIVATING)
|
||||
r = -EAGAIN;
|
||||
else
|
||||
- r = -ENOEXEC;
|
||||
+ r = -EBADR;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -557,8 +557,10 @@ int job_run_and_invalidate(Job *j) {
|
||||
if (j) {
|
||||
if (r == -EALREADY)
|
||||
r = job_finish_and_invalidate(j, JOB_DONE, true);
|
||||
- else if (r == -ENOEXEC)
|
||||
+ else if (r == -EBADR)
|
||||
r = job_finish_and_invalidate(j, JOB_SKIPPED, true);
|
||||
+ else if (r == -ENOEXEC)
|
||||
+ r = job_finish_and_invalidate(j, JOB_INVALID, true);
|
||||
else if (r == -EAGAIN) {
|
||||
j->state = JOB_WAITING;
|
||||
m->n_running_jobs--;
|
||||
@@ -784,7 +786,7 @@ int job_finish_and_invalidate(Job *j, JobResult result, bool recursive) {
|
||||
goto finish;
|
||||
}
|
||||
|
||||
- if (result == JOB_FAILED)
|
||||
+ if (result == JOB_FAILED || result == JOB_INVALID)
|
||||
j->manager->n_failed_jobs ++;
|
||||
|
||||
job_uninstall(j);
|
||||
@@ -1143,7 +1145,8 @@ static const char* const job_result_table[_JOB_RESULT_MAX] = {
|
||||
[JOB_TIMEOUT] = "timeout",
|
||||
[JOB_FAILED] = "failed",
|
||||
[JOB_DEPENDENCY] = "dependency",
|
||||
- [JOB_SKIPPED] = "skipped"
|
||||
+ [JOB_SKIPPED] = "skipped",
|
||||
+ [JOB_INVALID] = "invalid",
|
||||
};
|
||||
|
||||
DEFINE_STRING_TABLE_LOOKUP(job_result, JobResult);
|
||||
diff --git a/src/core/job.h b/src/core/job.h
|
||||
index d90bc96..4237529 100644
|
||||
--- a/src/core/job.h
|
||||
+++ b/src/core/job.h
|
||||
@@ -97,7 +97,8 @@ enum JobResult {
|
||||
JOB_TIMEOUT, /* JobTimeout elapsed */
|
||||
JOB_FAILED, /* Job failed */
|
||||
JOB_DEPENDENCY, /* A required dependency job did not result in JOB_DONE */
|
||||
- JOB_SKIPPED, /* JOB_RELOAD of inactive unit; negative result of JOB_VERIFY_ACTIVE */
|
||||
+ JOB_SKIPPED, /* Negative result of JOB_VERIFY_ACTIVE */
|
||||
+ JOB_INVALID, /* JOB_RELOAD of inactive unit */
|
||||
_JOB_RESULT_MAX,
|
||||
_JOB_RESULT_INVALID = -1
|
||||
};
|
||||
diff --git a/src/core/unit.c b/src/core/unit.c
|
||||
index b65e798..6c2c4a0 100644
|
||||
--- a/src/core/unit.c
|
||||
+++ b/src/core/unit.c
|
||||
@@ -1239,8 +1239,11 @@ int unit_reload(Unit *u) {
|
||||
if (state == UNIT_RELOADING)
|
||||
return -EALREADY;
|
||||
|
||||
- if (state != UNIT_ACTIVE)
|
||||
+ if (state != UNIT_ACTIVE) {
|
||||
+ log_warning_unit(u->id, "Unit %s cannot be reloaded because it is inactive.",
|
||||
+ u->id);
|
||||
return -ENOEXEC;
|
||||
+ }
|
||||
|
||||
if ((following = unit_following(u))) {
|
||||
log_debug_unit(u->id, "Redirecting reload request from %s to %s.",
|
@ -0,0 +1,34 @@
|
||||
From 9c6964b0a23852353aaa0ca0c30586c3f19502b7 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
||||
Date: Tue, 3 Dec 2013 08:07:32 -0500
|
||||
Subject: [PATCH] journal: fail silently in sd_j_sendv() if journal is
|
||||
unavailable
|
||||
|
||||
"syslog(3) and sd_journal_print() may largely be used interchangeably
|
||||
functionality-wise" according to sd_journal_print(3). This socket
|
||||
should be always available except in rare circumstatances, and we
|
||||
don't random applications to fail on logging, so let's do what syslog
|
||||
did. The alternative of forcing all callers to do error handling for
|
||||
this rare case doesn't really have any benefits, since if they can't
|
||||
log there isn't much they can do anyway.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1023041
|
||||
---
|
||||
src/journal/journal-send.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/src/journal/journal-send.c b/src/journal/journal-send.c
|
||||
index d00e26f..d99ff0c 100644
|
||||
--- a/src/journal/journal-send.c
|
||||
+++ b/src/journal/journal-send.c
|
||||
@@ -305,6 +305,10 @@ _public_ int sd_journal_sendv(const struct iovec *iov, int n) {
|
||||
if (k >= 0)
|
||||
return 0;
|
||||
|
||||
+ /* Fail silently if the journal is not available */
|
||||
+ if (errno == ENOENT)
|
||||
+ return 0;
|
||||
+
|
||||
if (errno != EMSGSIZE && errno != ENOBUFS)
|
||||
return -errno;
|
||||
|
35
systemd.spec
35
systemd.spec
@ -16,7 +16,7 @@
|
||||
Name: systemd
|
||||
Url: http://www.freedesktop.org/wiki/Software/systemd
|
||||
Version: 208
|
||||
Release: 6%{?gitcommit:.git%{gitcommit}}%{?dist}
|
||||
Release: 7%{?gitcommit:.git%{gitcommit}}%{?dist}
|
||||
# For a breakdown of the licensing, see README
|
||||
License: LGPLv2+ and MIT and GPLv2+
|
||||
Summary: A System and Service Manager
|
||||
@ -97,7 +97,7 @@ Patch057: 0057-libudev-default-log_priority-to-INFO.patch
|
||||
Patch058: 0058-nspawn-only-pass-in-slice-setting-if-it-is-set.patch
|
||||
Patch059: 0059-zsh-completion-add-systemd-run.patch
|
||||
Patch060: 0060-man-explain-NAME-in-systemctl-man-page.patch
|
||||
#Patch061: 0061-virt-move-caching-of-virtualization-check-results-in.patch
|
||||
Patch061: 0061-virt-move-caching-of-virtualization-check-results-in.patch
|
||||
Patch062: 0062-systemctl-fix-typo-in-help-text.patch
|
||||
Patch063: 0063-analyze-plot-place-the-text-on-the-side-with-most-sp.patch
|
||||
Patch064: 0064-detect_virtualization-returns-NULL-pass-empty-string.patch
|
||||
@ -152,6 +152,30 @@ Patch112: 0112-tmpfiles-adjust-excludes-for-the-new-per-service-pri.patch
|
||||
Patch113: 0113-core-socket-fix-SO_REUSEPORT.patch
|
||||
Patch114: 0114-localed-match-converted-keymaps-before-legacy.patch
|
||||
Patch115: 0115-keymap-Add-Toshiba-Satellite-U940.patch
|
||||
Patch116: 0116-calendar-support-yearly-and-annually-names-the-same-.patch
|
||||
Patch117: 0117-hashmap-be-a-bit-more-conservative-with-pre-allocati.patch
|
||||
Patch118: 0118-manager-don-t-do-plymouth-in-a-container.patch
|
||||
Patch119: 0119-nspawn-add-new-drop-capability-switch.patch
|
||||
Patch120: 0120-valgrind-make-running-PID-1-in-valgrind-useful.patch
|
||||
Patch121: 0121-efi-boot-generator-don-t-mount-boot-eagerly.patch
|
||||
Patch122: 0122-hwdb-Update-database-of-Bluetooth-company-identifier.patch
|
||||
Patch123: 0123-journal-when-appending-to-journal-file-allocate-larg.patch
|
||||
Patch124: 0124-journal-make-table-const.patch
|
||||
Patch125: 0125-journald-keep-statistics-on-how-of-we-hit-miss-the-m.patch
|
||||
Patch126: 0126-journal-optimize-bisection-logic-a-bit-by-caching-th.patch
|
||||
Patch127: 0127-journal-fix-iteration-when-we-go-backwards-from-the-.patch
|
||||
Patch128: 0128-journal-allow-journal_file_copy_entry-to-work-on-non.patch
|
||||
Patch129: 0129-journal-simplify-pre-allocation-logic.patch
|
||||
Patch130: 0130-journald-mention-how-long-we-needed-to-flush-to-var-.patch
|
||||
Patch131: 0131-automount-log-info-about-triggering-process.patch
|
||||
Patch132: 0132-virt-split-detect_vm-into-separate-functions.patch
|
||||
Patch133: 0133-hwdb-Update-database-of-Bluetooth-company-identifier.patch
|
||||
Patch134: 0134-sysfs-show.c-return-negative-error.patch
|
||||
Patch135: 0135-util.c-check-if-return-value-from-ttyname_r-is-0-ins.patch
|
||||
Patch136: 0136-docs-remove-unneeded-the-s-in-gudev-docs.patch
|
||||
Patch137: 0137-man-explicitly-say-when-multiple-units-can-be-specif.patch
|
||||
Patch138: 0138-systemd-treat-reload-failure-as-failure.patch
|
||||
Patch139: 0139-journal-fail-silently-in-sd_j_sendv-if-journal-is-un.patch
|
||||
|
||||
# kernel-install patch for grubby, drop if grubby is obsolete
|
||||
Patch1000: kernel-install-grubby.patch
|
||||
@ -800,6 +824,13 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g
|
||||
%{_datadir}/systemd/gatewayd
|
||||
|
||||
%changelog
|
||||
* Tue Dec 03 2013 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 208-7
|
||||
- Backport patches (#1023041, #1036845, #1006386?)
|
||||
- HWDB update
|
||||
- Some small new features: nspawn --drop-capability=, running PID 1 under
|
||||
valgrind, "yearly" and "annually" in calendar specifications
|
||||
- Some small documentation and logging updates
|
||||
|
||||
* Tue Nov 19 2013 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 208-6
|
||||
- Bump version to stay ahead of f20
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user