diff --git a/src/knot/server/journal.c b/src/knot/server/journal.c
index 6b09dd3ceab00cbb735422baa55f9a0fac4ee659..200a22a3dc0a2e3b50c1312699f56312e155b69d 100644
--- a/src/knot/server/journal.c
+++ b/src/knot/server/journal.c
@@ -547,7 +547,11 @@ int journal_write_in(journal_t *j, journal_node_t **rn, uint64_t id, size_t len)
 	            (unsigned long long)id, j->qtail, len, j->fsize);
 
 	/* Calculate remaining bytes to reach file size limit. */
-	size_t fs_remaining = j->fslimit - j->fsize;
+	size_t fs_remaining = 0;
+	if (j->fsize < j->fslimit) {
+		fs_remaining = j->fslimit - j->fsize;
+	}
+
 	int seek_ret = 0;
 
 	/* Increase free segment if on the end of file. */
diff --git a/tests/journal.c b/tests/journal.c
index 08878b44b70a96915fc62e2a42ca707f198e031d..e8a627f15724b7e0046be0166bd7fd1264569722 100644
--- a/tests/journal.c
+++ b/tests/journal.c
@@ -19,6 +19,7 @@
 #include <stdio.h>
 #include <limits.h>
 #include <unistd.h>
+#include <sys/stat.h>
 #include <tap/basic.h>
 
 #include "knot/server/journal.h"
@@ -36,7 +37,7 @@ static int randstr(char* dst, size_t len)
 
 int main(int argc, char *argv[])
 {
-	plan(10);
+	plan_lazy();
 
 	/* Create tmpdir */
 	int fsize = 10 * 1024 * 1024;
@@ -112,6 +113,33 @@ int main(int argc, char *argv[])
 	}
 	is_int(KNOT_EOK, ret, "journal: sustained mmap r/w");
 
+	/* Overfill */
+	ret = journal_map(journal, chk_key, &mptr, fsize, false);
+	is_int(KNOT_ESPACE, ret, "journal: overfill");
+
+	/* Fillup */
+	tskey = 0xBEEF0000;
+	size_t large_entry_len = 512 * 1024;
+	char *large_entry = malloc(512 * 1024);
+	assert(large_entry);
+	randstr(large_entry, large_entry_len);
+	for (int i = 0; i < 512; ++i) {
+		chk_key = tskey + i;
+		ret = journal_map(journal, chk_key, &mptr, large_entry_len, false);
+		if (ret != KNOT_EOK) {
+			break;
+		}
+
+		journal_unmap(journal, chk_key, mptr, 1);
+	}
+	is_int(KNOT_EBUSY, ret, "journal: fillup");
+	free(large_entry);
+
+	/* Check file size. */
+	struct stat st;
+	stat(journal->path, &st);
+	ok(st.st_size < fsize + large_entry_len, "journal: fillup file size check");
+
 	/* Close journal. */
 	journal_close(journal);