chiark / gitweb /
7 years agosd-bus: rename "connection name" to "description" for the sd-bus API too
Lennart Poettering [Tue, 4 Nov 2014 15:13:49 +0000 (16:13 +0100)]
sd-bus: rename "connection name" to "description" for the sd-bus API too

kdbus recently renamed this concept, and so should we in what we expose
in userspace.

7 years agosd-bus: sync kdbus.h (ABI break)
Daniel Mack [Tue, 4 Nov 2014 11:08:36 +0000 (12:08 +0100)]
sd-bus: sync kdbus.h (ABI break)

Catch up with some changes in kdbus.h:

  * KDBUS_{ITEM,ATTACH}_CONN_NAME were renamed to
    KDBUS_{ITEM,ATTACH}_CONN_DESCRIPTION, so the term 'name' is not
    overloaded as much.

  * The item types were re-ordered a little so they are lined up to the
    order of the corresponding KDBUS_ATTACH flags

  * A new item type KDBUS_ITEM_OWNED_NAME was introduced, designated to
    store a struct kdbus_name in item->name. KDBUS_ITEM_NAME soley
    stores data in item->str now

  * Some kerneldoc fixes

7 years agobarrier: explicitly ignore return values of barrier_place()
David Herrmann [Tue, 4 Nov 2014 08:49:43 +0000 (09:49 +0100)]
barrier: explicitly ignore return values of barrier_place()

The barrier implementation tracks remote states internally. There is no
need to check the return value of any barrier_*() function if the caller
is not interested in the result. The barrier helpers only return the state
of the remote side, which is usually not interesting as later calls to
barrier_sync() will catch this, anyway.

Shut up coverity by explicitly ignoring return values of barrier_place()
if we're not interested in it.

7 years agoutil: introduce negative_errno()
David Herrmann [Mon, 3 Nov 2014 17:23:28 +0000 (18:23 +0100)]
util: introduce negative_errno()

Imagine a constructor like this:

        int object_new(void **out) {
                void *my_object;
                int r;

                r = ioctl(...);
                if (r < 0)
                        return -errno;

                *out = my_object;
                return 0;

We have a lot of those in systemd. If you now call those, gcc might inline
the call and optimize it. However, gcc cannot know that "errno" is
negative if "r" is. Therefore, a caller like this will produce warnings:

        r = object_new(&obj);
        if (r < 0)
                return r;

        obj->xyz = "foobar";

In case the ioctl in the constructor fails, gcc might assume "errno" is 0
and thus the error-handling is not triggered. Therefore, "obj" is
uninitialized, but accessed. Gcc will warn about that.

The new negative_errno() helper can be used to mitigate those warnings.
The helper is guaranteed to return a negative integer. Furthermore, it
spills out runtime warnings if "errno" is non-negative.

Instead of returning "-errno", you can use:
        return negative_errno();

gcc will no longer assume that this can return >=0, thus, it will not warn
about it.

Use this new helper in libsystemd-terminal to fix some grdev-drm warnings.

7 years agoProperly define the __NR_memfd_create macro for MIPS
Vicente Olivert Riera [Mon, 3 Nov 2014 14:48:35 +0000 (14:48 +0000)]
Properly define the __NR_memfd_create macro for MIPS

This macro exists for MIPS since v3.17:

7 years agolocalectl: fix localectl set-x11-keymap syntax description
Jan Synacek [Mon, 3 Nov 2014 13:01:04 +0000 (14:01 +0100)]
localectl: fix localectl set-x11-keymap syntax description

This complements the fix in:

    commit cd4c6fb12598435fe24431f1dd616f9582f0e3bd
    Author: Jan Synacek <>
    Date:   Mon Oct 20 12:43:39 2014 +0200

        man: fix localectl set-x11-keymap syntax description

7 years agojournald: include audit message type number in MESSAGE= string
Lennart Poettering [Tue, 4 Nov 2014 00:00:50 +0000 (01:00 +0100)]
journald: include audit message type number in MESSAGE= string

7 years agojournal: also consider audit fields with '-' valid
Lennart Poettering [Mon, 3 Nov 2014 23:48:32 +0000 (00:48 +0100)]
journal: also consider audit fields with '-' valid

7 years agoaudit: improve the audit messages we generate
Lennart Poettering [Mon, 3 Nov 2014 23:47:44 +0000 (00:47 +0100)]
audit: improve the audit messages we generate

always pass along comm, as documented by audit. Always set the correct
comm value.

7 years agojournald: don't pass around SO_TIMESTAMP timestamp for audit, which we don't have...
Lennart Poettering [Mon, 3 Nov 2014 23:32:02 +0000 (00:32 +0100)]
journald: don't pass around SO_TIMESTAMP timestamp for audit, which we don't have anyway

7 years agojournal: when dumping log data with missing COMM fields, show "unknown" instead
Lennart Poettering [Mon, 3 Nov 2014 23:28:33 +0000 (00:28 +0100)]
journal: when dumping log data with missing COMM fields, show "unknown" instead

A small readability improvement...

7 years agojournald: suppress low-level audit text prefix in MESSAGE= field
Lennart Poettering [Mon, 3 Nov 2014 23:27:55 +0000 (00:27 +0100)]
journald: suppress low-level audit text prefix in MESSAGE= field

Let's make the log output more readable, and the header can be
reconstructed in full from the other fields

7 years agojournald: properly decode audit's proctitle= field
Lennart Poettering [Mon, 3 Nov 2014 23:27:26 +0000 (00:27 +0100)]
journald: properly decode audit's proctitle= field

7 years agojournald: enable audit in the kernel when initializing
Lennart Poettering [Mon, 3 Nov 2014 23:01:32 +0000 (00:01 +0100)]
journald: enable audit in the kernel when initializing

Similar to auditd actually turn on auditing as we are starting. This way
we can operate entirely without auditd around.

7 years agojournald: there's no point in turning on SO_TIMESTAMP for audit sockets, audit doesn...
Lennart Poettering [Mon, 3 Nov 2014 22:28:12 +0000 (23:28 +0100)]
journald: there's no point in turning on SO_TIMESTAMP for audit sockets, audit doesn't support timestamps anyway

7 years agoupdate TODO
Lennart Poettering [Mon, 3 Nov 2014 22:10:47 +0000 (23:10 +0100)]
update TODO

7 years agojournald: fix memory leak on error path
Lennart Poettering [Mon, 3 Nov 2014 22:10:34 +0000 (23:10 +0100)]
journald: fix memory leak on error path

7 years agojournald: also check journal file size to deduce if it is empty
Lennart Poettering [Mon, 3 Nov 2014 22:10:21 +0000 (23:10 +0100)]
journald: also check journal file size to deduce if it is empty

7 years agojournalctl: add new --vacuum-size= and --vacuum-time= commands to clean up journal...
Lennart Poettering [Mon, 3 Nov 2014 22:08:33 +0000 (23:08 +0100)]
journalctl: add new --vacuum-size= and --vacuum-time= commands to clean up journal files based on a size/time limit

This is equivalent to the effect of SystemMaxUse= and RetentionSec=,
however can be invoked directly instead of implicitly.

7 years agoman: document audit input for journald
Lennart Poettering [Mon, 3 Nov 2014 21:02:23 +0000 (22:02 +0100)]
man: document audit input for journald

7 years agounits: make ReceiveBuffer= line more readable by using M suffix
Lennart Poettering [Mon, 3 Nov 2014 20:11:49 +0000 (21:11 +0100)]
units: make ReceiveBuffer= line more readable by using M suffix

7 years agojournald: fix minor memory leak
Lennart Poettering [Mon, 3 Nov 2014 20:11:16 +0000 (21:11 +0100)]
journald: fix minor memory leak

7 years agocore: introduce ConditionSecurity=audit
Lennart Poettering [Mon, 3 Nov 2014 20:09:38 +0000 (21:09 +0100)]
core: introduce ConditionSecurity=audit

And conditionalize journald audit support with it

7 years agojournald: if available pull audit messages from the kernel into journal logs
Lennart Poettering [Mon, 3 Nov 2014 19:58:24 +0000 (20:58 +0100)]
journald: if available pull audit messages from the kernel into journal logs

7 years agojournald: remove a number of malloc()s from the syslog message handling
Lennart Poettering [Mon, 3 Nov 2014 19:24:43 +0000 (20:24 +0100)]
journald: remove a number of malloc()s from the syslog message handling

7 years agojournald: constify all things!
Lennart Poettering [Sun, 2 Nov 2014 20:46:42 +0000 (21:46 +0100)]
journald: constify all things!

7 years agoman: sd_event_add_post - fix typo
Tom Gundersen [Mon, 3 Nov 2014 14:58:30 +0000 (15:58 +0100)]
man: sd_event_add_post - fix typo

7 years agoman: glib-event-glue.c - remove unnecessary includes
Tom Gundersen [Mon, 3 Nov 2014 13:45:21 +0000 (14:45 +0100)]
man: glib-event-glue.c - remove unnecessary includes

This is just an example, so no error-handling is done here anyway.

7 years agosd-pppoe: include ppp_defs.h
Lukas Nykryn [Mon, 3 Nov 2014 11:31:58 +0000 (12:31 +0100)]
sd-pppoe: include ppp_defs.h

On older kernels before this patch:
ppp-ioctl.h did not pull in ppp_defs.h which results in build errors

7 years agounits: order sd-journal-flush after sd-remount-fs
Zbigniew Jędrzejewski-Szmek [Mon, 3 Nov 2014 02:45:42 +0000 (21:45 -0500)]
units: order sd-journal-flush after sd-remount-fs

Otherwise we could attempt to flush the journal while /var/log/ was
still ro, and silently skip journal flushing.

The way that errors in flushing are handled should still be changed to
be more transparent and robust.

7 years agounit: do not order before
Zbigniew Jędrzejewski-Szmek [Sun, 2 Nov 2014 16:39:17 +0000 (11:39 -0500)]
unit: do not order before

Since commit 19f8d037833f2 'timer: order OnCalendar units after if DefaultDependencies=no' timers might get a
dependency on, which does not really belong in early
boot. If ntp is enabled, might be delayed until a
network connection is established.

It turns out that majority of timer units found in the wild do not
need to be started in early boot. Out of the timer units available in
Fedora 21, only systemd-readahead-done.timer and mdadm-last-resort@.timer
should be started early, but they both have DefaultDependencies=no,
so are not part of anyway. All the rest look like they
will be fine with being started a bit later (and the majority even
much later, since they run daily or weekly).

Let be pulled in by, but without the
temporal dependency. This means timer units are started on a "best
effort" schedule.

7 years agomanager: do not print timing when running in test mode
Zbigniew Jędrzejewski-Szmek [Sun, 2 Nov 2014 17:19:38 +0000 (12:19 -0500)]
manager: do not print timing when running in test mode

7 years agoRaise level of 'Found dependency...' lines
Zbigniew Jędrzejewski-Szmek [Sun, 2 Nov 2014 17:10:42 +0000 (12:10 -0500)]
Raise level of 'Found dependency...' lines

This way they always show up together with 'Found ordering cycle...'.
Ordering cycles are a serious error and a major pain to debug. If
quiet is enabled, only the first and the last line of output are

systemd[1]: Found ordering cycle on
systemd[1]: Breaking ordering cycle by deleting job
systemd[1]: Job deleted to break ordering cycle starting with

which isn't particularly enlightening. So just show the whole message
at the same level.

7 years agosd-pppoe: fix some leaks
Tom Gundersen [Sat, 1 Nov 2014 22:53:25 +0000 (23:53 +0100)]
sd-pppoe: fix some leaks

7 years agolibsystemd-networkd: introduce sd-pppoe library
Tom Gundersen [Thu, 30 Oct 2014 23:02:57 +0000 (00:02 +0100)]
libsystemd-networkd: introduce sd-pppoe library

This library negotiates a PPPoE channel. It handles the discovery stage and
leaves the session stage to the kernel. A further PPP library is needed to
actually set up a PPP unit (negotatie LCP, IPCP and do authentication), so in
isolation this is not yet very useful.

The test program has two modes:

  # ./test-pppoe

will create a veth tunnel in a new network namespace, start pppoe-server on one
end and this client library on the other. The pppd server will time out as no
LCP is performed, and the client will then shut down gracefully.

  # ./test-pppoe eth0

will run the client on eth0 (or any other netdev), and requires a PPPoE server
to be reachable on the local link.

7 years agolibudev: Use correct free function
Colin Walters [Sat, 1 Nov 2014 19:49:53 +0000 (15:49 -0400)]
libudev: Use correct free function

FILE * wants cleanup_fclose().

Spotted by udev hwdb segfaulting in gnome-continuous' buildroot

7 years agoscsi_id: fix usage spelling
Joe Lawrence [Sat, 1 Nov 2014 16:18:08 +0000 (12:18 -0400)]
scsi_id: fix usage spelling


7 years agoTODO
Zbigniew Jędrzejewski-Szmek [Sat, 1 Nov 2014 19:37:16 +0000 (15:37 -0400)]

7 years agokernel-install/90-loaderentry.install: fix cmdline parsing
Michael Chapman [Wed, 29 Oct 2014 00:54:07 +0000 (11:54 +1100)]
kernel-install/90-loaderentry.install: fix cmdline parsing

A recent commit (2f3a215) changed the parsing of /proc/cmdline to use a
shell array. Unfortunately, this introduced a bug: "read -ar line"
populates the shell variable $r, not $line. This breaks installation of
new loader entries:

  # kernel-install add 3.17.1-304.fc21.x86_64 \
  Could not determine the kernel command line parameters.
  Please specify the kernel command line in /etc/kernel/cmdline!

This commit alters the read command to correctly populate the $line
array instead.

7 years agosystemd-journal-flush.service: remove "trigger" from description
Zbigniew Jędrzejewski-Szmek [Sat, 1 Nov 2014 17:52:14 +0000 (13:52 -0400)]
systemd-journal-flush.service: remove "trigger" from description

This service is now synchronous, so "trigger" is misleading.

7 years agoman: explain journalctl --flush correctly
Umut Tezduyar Lindskog [Wed, 29 Oct 2014 10:20:02 +0000 (11:20 +0100)]
man: explain journalctl --flush correctly

7 years agobus: use STR_IN_SET
WaLyong Cho [Thu, 30 Oct 2014 06:45:15 +0000 (15:45 +0900)]
bus: use STR_IN_SET

7 years agocore: improve error message when machine id is missing
Jan Synacek [Fri, 31 Oct 2014 09:16:45 +0000 (10:16 +0100)]
core: improve error message when machine id is missing

7 years agosd-dhcp6-client: fix off-by-two error in DUID length
Dan Williams [Fri, 31 Oct 2014 17:20:21 +0000 (12:20 -0500)]
sd-dhcp6-client: fix off-by-two error in DUID length

The duid data passed by the caller does not include the DUID type,
but sd_dhcp6_client_set_duid() was treating it like it did.

7 years agocalendarspec: add constant for weekdays_bits
Daniele Medri [Thu, 30 Oct 2014 11:19:14 +0000 (12:19 +0100)]
calendarspec: add constant for weekdays_bits

7 years agoman: describe all log levels in udevadm(8)
Zbigniew Jędrzejewski-Szmek [Sat, 1 Nov 2014 18:36:29 +0000 (14:36 -0400)]
man: describe all log levels in udevadm(8)

7 years agoUse log "level" instead of "priority"
Zbigniew Jędrzejewski-Szmek [Sat, 1 Nov 2014 18:33:01 +0000 (14:33 -0400)]
Use log "level" instead of "priority"

The term "priority" is misleading because higher levels have lower
priority. "Level" is clearer and shorter.

This commit touches only the textual descriptions, not function and variable
names themselves. "Priority" is used in various command-line switches and
protocol constants, so completly getting rid of "priority" is hard.

I also left "priority" in various places where the clarity suffered
when it was removed.

7 years agolibudev: do not accept invalid log levels
Zbigniew Jędrzejewski-Szmek [Sat, 1 Nov 2014 16:06:41 +0000 (12:06 -0400)]
libudev: do not accept invalid log levels

Invalid log levels lead to a assert failure later on.

7 years agolibudev: modernization
Zbigniew Jędrzejewski-Szmek [Sat, 1 Nov 2014 15:32:44 +0000 (11:32 -0400)]
libudev: modernization

This brings udev logging style a bit closer to normal systemd convention.

7 years agosd-dhcp-lease: use shared default prefixlen function
Tom Gundersen [Sat, 1 Nov 2014 18:02:44 +0000 (19:02 +0100)]
sd-dhcp-lease: use shared default prefixlen function

Also change the default prefixlen function to only access the first octet of the in_addr.

7 years agosd-dhcp-lease: use unaligned read helpers
Tom Gundersen [Sat, 1 Nov 2014 17:59:55 +0000 (18:59 +0100)]
sd-dhcp-lease: use unaligned read helpers

7 years agodhcp6: use unaligned read/write helpers
Tom Gundersen [Sat, 1 Nov 2014 13:32:28 +0000 (14:32 +0100)]
dhcp6: use unaligned read/write helpers

7 years agoresolved: dns-packet - use unaligned read/write helpers
Tom Gundersen [Sat, 1 Nov 2014 13:07:42 +0000 (14:07 +0100)]
resolved: dns-packet - use unaligned read/write helpers

7 years agoshared: add helpers for unaligend BE read/write
Tom Gundersen [Sat, 1 Nov 2014 13:04:17 +0000 (14:04 +0100)]
shared: add helpers for unaligend BE read/write

7 years agohwdb: Update database of Bluetooth company identifiers
Marcel Holtmann [Fri, 31 Oct 2014 19:37:59 +0000 (20:37 +0100)]
hwdb: Update database of Bluetooth company identifiers

7 years agoptyforward: rework PTY forwarder logic used by nspawn to utilize the normal event...
Lennart Poettering [Fri, 31 Oct 2014 15:54:11 +0000 (16:54 +0100)]
ptyforward: rework PTY forwarder logic used by nspawn to utilize the normal event loop

We really should not run manual event loops anymore, but standardize on
sd_event, so that we can run sd_bus connections from it eventually.

7 years agoMake bus errno mappings non-static
Zbigniew Jędrzejewski-Szmek [Fri, 31 Oct 2014 14:07:54 +0000 (10:07 -0400)]
Make bus errno mappings non-static

__attribute__((used)) is not enough to force static variables to
be carried over to a compiled program from a library. Mappings defined
in libsystemd-shared.a were not visible in the compiled binaries.
To ensure that the mappings are present in the final binary, the
tables are made non-static and are given a real unique name by which
they can be referenced.

To use a mapping defined not in the local compilation unit (e.g. in
a library) a reference to the mapping table is added. This is done
by including a declaration in the header file.

Expected values in test-engine are fixed to reflect the new mappings.

7 years agobus: do not segfault on zeros in errno mapping table
Zbigniew Jędrzejewski-Szmek [Fri, 31 Oct 2014 13:31:02 +0000 (09:31 -0400)]
bus: do not segfault on zeros in errno mapping table

Depending on the link order, holes might appear in the body of
the sd_bus_errnomap section. Ignore them.

Adds a simple test to print the table to help with debugging such
issues in the future.

7 years agounits: don't order journal flushing afte
Lennart Poettering [Fri, 31 Oct 2014 15:22:36 +0000 (16:22 +0100)]
units: don't order journal flushing afte

Instead, only depend on the actual file systems we need.

This should solve dep loops on setups where is moved
into late boot.

7 years agonspawn: don't make up -1 as error code
Lennart Poettering [Thu, 30 Oct 2014 19:53:23 +0000 (20:53 +0100)]
nspawn: don't make up -1 as error code

7 years agoshared/install: avoid prematurely rejecting "missing" units
Dave Reisner [Fri, 31 Oct 2014 00:12:05 +0000 (20:12 -0400)]
shared/install: avoid prematurely rejecting "missing" units

f7101b7368df copied some logic to prevent enabling masked units, but
also added a check which causes attempts to enable templated units to
fail. Since we know the logic beyond this check will properly handle
units which truly do not exist, we can rely on the unit file state
comparison to suffice for expressing the intent of f7101b7368df.


7 years agosd-bus: add missing include
Tom Gundersen [Fri, 31 Oct 2014 10:22:46 +0000 (11:22 +0100)]
sd-bus: add missing include

7 years agotests: add test-copy
Ronny Chevalier [Wed, 29 Oct 2014 21:28:50 +0000 (22:28 +0100)]
tests: add test-copy

7 years agotests: add tests for path_startswith
Ronny Chevalier [Tue, 21 Oct 2014 22:58:24 +0000 (00:58 +0200)]
tests: add tests for path_startswith

7 years agoshared: fix typo
Ronny Chevalier [Thu, 16 Oct 2014 21:22:06 +0000 (23:22 +0200)]
shared: fix typo

7 years agotests: add missing entry for LocalVariable to test-tables
Ronny Chevalier [Sun, 12 Oct 2014 16:11:15 +0000 (18:11 +0200)]
tests: add missing entry for LocalVariable to test-tables

7 years agotests: add test-locale-util
Ronny Chevalier [Sun, 12 Oct 2014 16:05:10 +0000 (18:05 +0200)]
tests: add test-locale-util

7 years agoshared: add missing includes
Ronny Chevalier [Sun, 12 Oct 2014 15:59:03 +0000 (17:59 +0200)]
shared: add missing includes

7 years agotests: add tests for strv.c
Ronny Chevalier [Sun, 12 Oct 2014 15:32:23 +0000 (17:32 +0200)]
tests: add tests for strv.c

add tests for:
- strv_find_startswith
- strv_push_prepend
- strv_consume_prepend

7 years agoremove references of readahead
Ronny Chevalier [Thu, 25 Sep 2014 20:46:37 +0000 (22:46 +0200)]
remove references of readahead

7 years agotests: add tests for fileio.c
Ronny Chevalier [Tue, 2 Sep 2014 16:55:31 +0000 (18:55 +0200)]
tests: add tests for fileio.c

add tests for the following functions:
- write_string_file_no_create
- load_env_file_pairs

7 years agosd-dhcp-client: clean up raw socket sd_event_source when creating new UDP socket
Dan Williams [Thu, 30 Oct 2014 19:23:00 +0000 (14:23 -0500)]
sd-dhcp-client: clean up raw socket sd_event_source when creating new UDP socket

The raw socket sd_event_source used for DHCP server solicitations
was simply dropped on the floor when creating the new UDP socket
after a lease has been acquired.  Clean it up properly so we're
not still listening and responding to events on it.

7 years agosnapshot: return error when snapshot exists
Zbigniew Jędrzejewski-Szmek [Tue, 28 Oct 2014 16:36:17 +0000 (12:36 -0400)]
snapshot: return error when snapshot exists

7 years agoConvert the rest to sd_bus_errnomap
Zbigniew Jędrzejewski-Szmek [Fri, 31 Oct 2014 00:32:17 +0000 (20:32 -0400)]
Convert the rest to sd_bus_errnomap

I tried to preserve most errno values, but in some cases they were
inconsistent (different errno values for the same error name) or just

7 years agobus: add sd_bus_errnomap section
Zbigniew Jędrzejewski-Szmek [Fri, 31 Oct 2014 00:31:48 +0000 (20:31 -0400)]
bus: add sd_bus_errnomap section

This allows custom "name" ↔ errno mappings to be registered.
Tables from all compilation units are concatenated.

7 years agotest: test a corner case in hashmap_remove_and_replace()
Michal Schmidt [Tue, 14 Oct 2014 23:35:40 +0000 (01:35 +0200)]
test: test a corner case in hashmap_remove_and_replace()

7 years add --enable-hashmap-debug option
Michal Schmidt [Tue, 14 Oct 2014 23:34:15 +0000 (01:34 +0200)] add --enable-hashmap-debug option

The option simply enables hashmap debugging by defining

I suggest developing new code with it enabled, to have the iterator checks.

7 years agotools: add gdb command to dump hashmap information
Michal Schmidt [Tue, 14 Oct 2014 23:31:23 +0000 (01:31 +0200)]
tools: add gdb command to dump hashmap information

$ sudo gdb -p 1
(gdb) source
(gdb) sd_dump_hashmaps
  ... lists allocated hashmaps ...
(gdb) sd_dump_hashmaps 1
  ... lists allocated hashmaps, their DIB histograms and contiguous
      blocks statistics ...

7 years agohashmap: rewrite the implementation
Michal Schmidt [Tue, 14 Oct 2014 23:27:16 +0000 (01:27 +0200)]
hashmap: rewrite the implementation

This is a rewrite of the hashmap implementation. Its advantage is lower
memory usage.

It uses open addressing (entries are stored in an array, as opposed to
linked lists). Hash collisions are resolved with linear probing and
Robin Hood displacement policy. See the references in hashmap.c.

Some fun empirical findings about hashmap usage in systemd on my laptop:
  - 98 % of allocated hashmaps are Sets.
  - Sets contain 78 % of all entries, plain Hashmaps 17 %, and
    OrderedHashmaps 5 %.
  - 60 % of allocated hashmaps contain only 1 entry.
  - 90 % of allocated hashmaps contain 5 or fewer entries.
  - 75 % of all entries are in hashmaps that use trivial_hash_ops.

Clearly it makes sense to:
  - store entries in distinct entry types. Especially for Sets - their
    entries are the most numerous and they require the least information
    to store an entry.
  - have a way to store small numbers of entries directly in the hashmap
    structs, and only allocate the usual entry arrays when the direct
    storage is full.

The implementation has an optional debugging feature (enabled by
defining the ENABLE_HASHMAP_DEBUG macro), where it:
  - tracks all allocated hashmaps in a linked list so that one can
    easily find them in gdb,
  - tracks which function/line allocated a given hashmap, and
  - checks for invalid mixing of hashmap iteration and modification.

Since entries are not allocated one-by-one anymore, mempools are not
used for entries. Originally I meant to drop mempools entirely, but it's
still worth it to use them for the hashmap structs. My testing indicates
that it makes loading of units about 5 % faster (a test with 10000 units
where more than 200000 hashmaps are allocated - pure malloc: 449±4 ms,
mempools: 427±7 ms).

Here are some memory usage numbers, taken on my laptop with a more or
less normal Fedora setup after booting with SELinux disabled (SELinux
increases systemd's memory usage significantly):

systemd (PID 1)                            Original   New    Change
dirty memory (from pmap -x 1) [KiB]            2152  1264     -41 %
total heap allocations (from gdb-heap) [KiB]   1623   756     -53 %

7 years agotest: adjust max load factor in test_hashmap_many()
Michal Schmidt [Wed, 15 Oct 2014 09:28:23 +0000 (11:28 +0200)]
test: adjust max load factor in test_hashmap_many()

A reimplementation of hashmaps will follow and it will use 0.8.

7 years agomempool: add a zeroing alloc function
Michal Schmidt [Fri, 24 Oct 2014 13:30:18 +0000 (15:30 +0200)]
mempool: add a zeroing alloc function

Add mempool_alloc0_tile(). It's like mempool_alloc_tile(), but it
initializes the allocated tile's memory to zero.

7 years agoutil: add log2u(), log2u_round_up()
Michal Schmidt [Tue, 14 Oct 2014 23:28:54 +0000 (01:28 +0200)]
util: add log2u(), log2u_round_up()

Two's logarithms for unsigned.

7 years agomemfd: rename memfd.h to memfd-util.h to avoid any confusion with any libc provided...
Lennart Poettering [Thu, 30 Oct 2014 17:32:37 +0000 (18:32 +0100)]
memfd: rename memfd.h to memfd-util.h to avoid any confusion with any libc provided headers

7 years agomemfd: always use our internal utility functions where we have them
Lennart Poettering [Thu, 30 Oct 2014 17:28:37 +0000 (18:28 +0100)]
memfd: always use our internal utility functions where we have them

7 years agomemfd: drop memfd_get_name() as it is unused
Lennart Poettering [Thu, 30 Oct 2014 17:28:01 +0000 (18:28 +0100)]
memfd: drop memfd_get_name() as it is unused

7 years agoupdate TODO
Lennart Poettering [Thu, 30 Oct 2014 16:39:29 +0000 (17:39 +0100)]
update TODO

7 years agojournal: when sending huge log messages prefer memfds over temporary files in /dev/shm
Lennart Poettering [Thu, 30 Oct 2014 16:36:02 +0000 (17:36 +0100)]
journal: when sending huge log messages prefer memfds over temporary files in /dev/shm

Previously when a log message grew beyond the maximum AF_UNIX/SOCK_DGRAM
datagram limit we'd send an fd to a deleted file in /dev/shm instead.
Because the sender could still modify the file after delivery we had to
immediately copy the data on the receiving side.

With memfds we can optimize this logic, and also remove the dependency
on /dev/shm: simply send a sealed memfd around, and if we detect the
seal memory map the fd and use it directly.

7 years agoCODING_STYLE: clarify that we really should use O_CLOEXEC everywhere
Lennart Poettering [Thu, 30 Oct 2014 16:05:25 +0000 (17:05 +0100)]
CODING_STYLE: clarify that we really should use O_CLOEXEC everywhere

7 years agomemfd: always create our memfds with CLOEXEC set
Lennart Poettering [Thu, 30 Oct 2014 15:23:34 +0000 (16:23 +0100)]
memfd: always create our memfds with CLOEXEC set

We really shouldn't create fds ever that have the flag unset.

7 years agoutil: unify how we see srand()
Lennart Poettering [Thu, 30 Oct 2014 14:35:37 +0000 (15:35 +0100)]
util: unify how we see srand()

7 years agoutil: don't block on getrandom()
Lennart Poettering [Thu, 30 Oct 2014 14:27:53 +0000 (15:27 +0100)]
util: don't block on getrandom()

7 years agosysusers: Preserve ownership and mode on /etc/passwd and friends
Colin Guthrie [Wed, 29 Oct 2014 14:03:41 +0000 (14:03 +0000)]
sysusers: Preserve ownership and mode on /etc/passwd and friends

When running sysusers we would clobber file ownership and permissions
on the files /etc/passwd, /etc/group and /etc/[g]shadow.

This simply preserves the ownership and mode if existing files are

7 years agokeymap: Ignore brightness keys on Dell Inspiron 1520 to avoid double events
Hans de Goede [Thu, 30 Oct 2014 09:15:54 +0000 (10:15 +0100)]
keymap: Ignore brightness keys on Dell Inspiron 1520 to avoid double events

On the Dell Inspiron 1520 both the atkbd and acpi-video input devices report
an event for pressing the brightness up / down key-combos, resulting in user
space seeing double events and increasing / decreasing the brightness 2 steps
for each keypress.

This hwdb snippet suppresses the atkbd events, making the Inspiron 1520 work
like most modern laptops which emit brightness up / down events through
acpi-video only.

Reported by Pavel Malyshev <>

7 years agozsh-completion: update start/restart completions
Zbigniew Jędrzejewski-Szmek [Thu, 30 Oct 2014 03:47:55 +0000 (23:47 -0400)]
zsh-completion: update start/restart completions

Now zsh should behave the same for those two subcommands as bash.

7 years agobash-completion: use improved filtering to make things faster
Zbigniew Jędrzejewski-Szmek [Thu, 30 Oct 2014 03:06:58 +0000 (23:06 -0400)]
bash-completion: use improved filtering to make things faster

7 years agosystemctl: obey --state in list-unit-files
Zbigniew Jędrzejewski-Szmek [Thu, 30 Oct 2014 02:51:00 +0000 (22:51 -0400)]
systemctl: obey --state in list-unit-files

7 years agosystemctl: let list-{units,unit-files } honour --type
Zbigniew Jędrzejewski-Szmek [Thu, 30 Oct 2014 02:46:30 +0000 (22:46 -0400)]
systemctl: let list-{units,unit-files } honour --type

The docs don't clarify what is expected, but I don't see any reason
why --type should be ignored.

Also restucture the compund conditions into separate clauses for
easier reading.

7 years agobash-completion: rework startable/restartable units once more
Zbigniew Jędrzejewski-Szmek [Thu, 30 Oct 2014 02:25:33 +0000 (22:25 -0400)]
bash-completion: rework startable/restartable units once more

I tried to use 'systemctl --all list-units' to filter unit files, but
this always filters out unit files which are not loaded. We want to complete
systemctl start with those units too, so this approach is not going to work.

New version is rather slow, but hopefully correct.

7 years agomissing.h: fix wrong __NR_getrandom syscall def
Dave Reisner [Thu, 30 Oct 2014 00:30:25 +0000 (20:30 -0400)]
missing.h: fix wrong __NR_getrandom syscall def

278 is vmsplice on x86_64. 318 is what we want:

7 years agoudev: path_id - update comments
Kay Sievers [Thu, 30 Oct 2014 00:18:34 +0000 (01:18 +0100)]
udev: path_id - update comments