diff --git a/repos/base-linux/run/lx_fs.run b/repos/base-linux/run/lx_fs.run
index ca329f1406..b681e4bc28 100644
--- a/repos/base-linux/run/lx_fs.run
+++ b/repos/base-linux/run/lx_fs.run
@@ -31,7 +31,8 @@ install_config {
-
+
+
@@ -39,12 +40,11 @@ install_config {
-
-
-
-
-
-
+
+
+
+
+
diff --git a/repos/libports/src/test/libc_ffat/main.cc b/repos/libports/src/test/libc_ffat/main.cc
index def23f5ac2..5fb7a26495 100644
--- a/repos/libports/src/test/libc_ffat/main.cc
+++ b/repos/libports/src/test/libc_ffat/main.cc
@@ -120,7 +120,7 @@ static void test(Genode::Xml_node node)
CALL_AND_CHECK(ret, mkdir(dir_name, 0777), ((ret == 0) || (errno == EEXIST)), "dir_name=%s", dir_name);
/* try to create again */
- CALL_AND_CHECK(ret, mkdir(dir_name, 0777), ((ret == 0) || (errno == EEXIST)), "dir_name=%s", dir_name);
+ CALL_AND_CHECK(ret, mkdir(dir_name, 0777), (errno == EEXIST), "dir_name=%s", dir_name);
/* change to new directory */
CALL_AND_CHECK(ret, chdir(dir_name), ret == 0, "dir_name=%s", dir_name);
diff --git a/repos/os/src/server/lx_fs/directory.h b/repos/os/src/server/lx_fs/directory.h
index c9c2bf7a72..5ae4172b75 100644
--- a/repos/os/src/server/lx_fs/directory.h
+++ b/repos/os/src/server/lx_fs/directory.h
@@ -42,8 +42,16 @@ class File_system::Directory : public Node
if (create) {
mode_t ugo = S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
ret = mkdir(path, ugo);
- if (ret == -1)
- throw No_space();
+ if (ret == -1) {
+ switch (errno) {
+ case ENAMETOOLONG: throw Name_too_long();
+ case EACCES: throw Permission_denied();
+ case ENOENT: throw Lookup_failed();
+ case EEXIST: throw Node_already_exists();
+ case ENOSPC:
+ default: throw No_space();
+ }
+ }
}
struct stat s;