From fa6ac76083b8ffc1309876459f54f9f0e2843731 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 30 Dec 2014 20:57:53 +0100 Subject: journald: process SIGBUS for the memory maps we set up Even though we use fallocate() it appears that file systems like btrfs will trigger SIGBUS on certain low-disk-space situation. We should handle that, hence catch the signal, add it to a list of invalidated pages, and replace the page with an empty memory area. After each write check if SIGBUS was triggered, and consider the write invalid if it was. This should make journald a lot more robust with file systems where fallocate() is not reliable, for example all CoW file systems (btrfs...), where changing written data can fail with disk full errors. https://bugzilla.redhat.com/show_bug.cgi?id=1045810 --- Makefile.am | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'Makefile.am') diff --git a/Makefile.am b/Makefile.am index 73e911f6b..10fc8a9c8 100644 --- a/Makefile.am +++ b/Makefile.am @@ -901,6 +901,8 @@ libsystemd_shared_la_SOURCES = \ src/shared/verbs.h \ src/shared/machine-image.c \ src/shared/machine-image.h \ + src/shared/sigbus.c \ + src/shared/sigbus.h \ src/shared/build.h if HAVE_UTMP @@ -1386,7 +1388,8 @@ tests += \ test-locale-util \ test-execute \ test-copy \ - test-cap-list + test-cap-list \ + test-sigbus EXTRA_DIST += \ test/a.service \ @@ -1580,6 +1583,12 @@ test_copy_SOURCES = \ test_copy_LDADD = \ libsystemd-shared.la +test_sigbus_SOURCES = \ + src/test/test-sigbus.c + +test_sigbus_LDADD = \ + libsystemd-shared.la + test_condition_SOURCES = \ src/test/test-condition.c -- cgit v1.2.3