1
0
mirror of https://github.com/systemd/systemd.git synced 2024-11-02 19:21:53 +03:00
Commit Graph

17624 Commits

Author SHA1 Message Date
Zbigniew Jędrzejewski-Szmek
fedfcdee6f 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.
2014-10-31 11:32:00 -04:00
Zbigniew Jędrzejewski-Szmek
5e071f200c 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.
2014-10-31 11:32:00 -04:00
Lennart Poettering
919699ec30 units: don't order journal flushing afte remote-fs.target
Instead, only depend on the actual file systems we need.

This should solve dep loops on setups where remote-fs.target is moved
into late boot.
2014-10-31 16:23:39 +01:00
Lennart Poettering
fddbb89c46 nspawn: don't make up -1 as error code 2014-10-31 16:23:39 +01:00
Dave Reisner
0ffce503cd shared/install: avoid prematurely rejecting "missing" units
f7101b7368 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 f7101b7368.

ref: https://bugs.archlinux.org/task/42616
2014-10-31 08:19:26 -04:00
Tom Gundersen
6bcf0cf60c sd-bus: add missing include 2014-10-31 11:22:46 +01:00
Ronny Chevalier
641d1f99b8 tests: add test-copy 2014-10-31 10:57:22 +01:00
Ronny Chevalier
5895b62f1d tests: add tests for path_startswith 2014-10-31 10:57:21 +01:00
Ronny Chevalier
d3774a1b15 shared: fix typo 2014-10-31 10:57:21 +01:00
Ronny Chevalier
17c6bd5222 tests: add missing entry for LocalVariable to test-tables 2014-10-31 10:57:21 +01:00
Ronny Chevalier
2b89a96060 tests: add test-locale-util 2014-10-31 10:57:21 +01:00
Ronny Chevalier
81a12ba6ec shared: add missing includes 2014-10-31 10:57:21 +01:00
Ronny Chevalier
7bd57a87ad tests: add tests for strv.c
add tests for:
- strv_find_startswith
- strv_push_prepend
- strv_consume_prepend
2014-10-31 10:57:21 +01:00
Ronny Chevalier
cb607ecb84 remove references of readahead 2014-10-31 10:57:21 +01:00
Ronny Chevalier
e07995a3e2 tests: add tests for fileio.c
add tests for the following functions:
- write_string_file_no_create
- load_env_file_pairs
2014-10-31 10:57:21 +01:00
Dan Williams
affaa94fc3 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.
2014-10-31 09:26:27 +01:00
Zbigniew Jędrzejewski-Szmek
7cabba0774 snapshot: return error when snapshot exists 2014-10-30 20:38:33 -04:00
Zbigniew Jędrzejewski-Szmek
7358dc029a 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
mismatched.
2014-10-30 20:38:28 -04:00
Zbigniew Jędrzejewski-Szmek
4a0a74179f bus: add sd_bus_errnomap section
This allows custom "name" ↔ errno mappings to be registered.
Tables from all compilation units are concatenated.
2014-10-30 20:31:48 -04:00
Michal Schmidt
e1323fbfbe test: test a corner case in hashmap_remove_and_replace() 2014-10-30 19:50:51 +01:00
Michal Schmidt
994701548d configure.ac: add --enable-hashmap-debug option
The option simply enables hashmap debugging by defining
ENABLE_HASHMAP_DEBUG.

I suggest developing new code with it enabled, to have the iterator checks.
2014-10-30 19:50:51 +01:00
Michal Schmidt
2ea8c08306 tools: add gdb command to dump hashmap information
$ sudo gdb -p 1
...
(gdb) source gdb-sd_dump_hashmaps.py
(gdb) sd_dump_hashmaps
  ... lists allocated hashmaps ...
(gdb) sd_dump_hashmaps 1
  ... lists allocated hashmaps, their DIB histograms and contiguous
      blocks statistics ...
2014-10-30 19:50:51 +01:00
Michal Schmidt
89439d4fc0 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 %
2014-10-30 19:50:51 +01:00
Michal Schmidt
ce79279bff test: adjust max load factor in test_hashmap_many()
A reimplementation of hashmaps will follow and it will use 0.8.
2014-10-30 19:50:51 +01:00
Michal Schmidt
52fc5ce38c 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.
2014-10-30 19:50:50 +01:00
Michal Schmidt
b5de6d9842 util: add log2u(), log2u_round_up()
Two's logarithms for unsigned.
2014-10-30 19:50:50 +01:00
Lennart Poettering
a09abc4ae0 memfd: rename memfd.h to memfd-util.h to avoid any confusion with any libc provided headers 2014-10-30 18:32:37 +01:00
Lennart Poettering
73843b5258 memfd: always use our internal utility functions where we have them 2014-10-30 18:28:37 +01:00
Lennart Poettering
47f0f4eb1d memfd: drop memfd_get_name() as it is unused 2014-10-30 18:28:01 +01:00
Lennart Poettering
f672117628 update TODO 2014-10-30 17:39:29 +01:00
Lennart Poettering
c79e98eadd 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.
2014-10-30 17:36:02 +01:00
Lennart Poettering
dd4540da0e CODING_STYLE: clarify that we really should use O_CLOEXEC everywhere 2014-10-30 17:05:25 +01:00
Lennart Poettering
45071fcaa0 memfd: always create our memfds with CLOEXEC set
We really shouldn't create fds ever that have the flag unset.
2014-10-30 16:23:34 +01:00
Lennart Poettering
ef309a681f util: unify how we see srand() 2014-10-30 15:35:37 +01:00
Lennart Poettering
97768fc574 util: don't block on getrandom() 2014-10-30 15:27:53 +01:00
Colin Guthrie
e3c72c21d6 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
found.
2014-10-30 13:38:10 +00:00
Hans de Goede
aba248ee6b 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 <p.malishev@gmail.com>

https://bugzilla.redhat.com/show_bug.cgi?id=1141525
2014-10-30 11:20:34 +01:00
Zbigniew Jędrzejewski-Szmek
81333ecf9d zsh-completion: update start/restart completions
Now zsh should behave the same for those two subcommands as bash.
2014-10-29 23:48:10 -04:00
Zbigniew Jędrzejewski-Szmek
372b221166 bash-completion: use improved filtering to make things faster 2014-10-29 23:48:10 -04:00
Zbigniew Jędrzejewski-Szmek
fec1530e6b systemctl: obey --state in list-unit-files 2014-10-29 23:48:10 -04:00
Zbigniew Jędrzejewski-Szmek
6c71341aee 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.
2014-10-29 23:48:10 -04:00
Zbigniew Jędrzejewski-Szmek
9ff8af5460 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.
2014-10-29 23:48:09 -04:00
Dave Reisner
74a550c5d8 missing.h: fix wrong __NR_getrandom syscall def
278 is vmsplice on x86_64. 318 is what we want:

http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/x86/syscalls/syscall_64.tbl
2014-10-29 20:41:46 -04:00
Kay Sievers
a42cdff19f udev: path_id - update comments 2014-10-30 01:20:56 +01:00
Lennart Poettering
1f70b0876a busctl: add new "capture" verb to record bus messages in libpcap compatible files, for dissection with wireshark 2014-10-30 01:13:54 +01:00
Dave Reisner
1ab19cb167 nspawn: ignore EEXIST when creating mount point
A combination of commits f3c80515c and 79d80fc14 cause nspawn to
silently fail with a commandline such as:

  # systemd-nspawn -D /build/extra-x86_64 --bind=/usr

strace shows the culprit:

  [pid 27868] writev(2, [{"Failed to create mount point /build/extra-x86_64/usr: File exists", 82}, {"\n", 1}], 2) = 83
2014-10-29 13:42:51 -04:00
Lennart Poettering
ef7b6c0190 sd-bus: properly handle removals of non-existing matches 2014-10-29 17:58:43 +01:00
Lennart Poettering
793062063a missing: no tabs please, we are british 2014-10-29 17:08:18 +01:00
Lennart Poettering
f85857df75 update TODO 2014-10-29 17:08:00 +01:00
Lennart Poettering
b244d9f374 missing: simplify memfd ifdeffery 2014-10-29 17:07:47 +01:00