Index: uspace/lib/libc/include/rwlock.h
===================================================================
--- uspace/lib/libc/include/rwlock.h	(revision 9413c0d0defe05c5ae4a86bbc19f4184d15f5da3)
+++ uspace/lib/libc/include/rwlock.h	(revision b3c38750a1d4b8fe19c67acaa51288310cd9ba5d)
@@ -45,4 +45,7 @@
 typedef atomic_t rwlock_t;
 
+#define RWLOCK_INITIALIZE(rwlock)	\
+    rwlock_t rwlock = FUTEX_INITIALIZER
+
 #define rwlock_initialize(rwlock)	futex_initialize((rwlock), 1)
 #define rwlock_reader_lock(rwlock)	futex_down((rwlock))
Index: uspace/srv/vfs/vfs.h
===================================================================
--- uspace/srv/vfs/vfs.h	(revision 9413c0d0defe05c5ae4a86bbc19f4184d15f5da3)
+++ uspace/srv/vfs/vfs.h	(revision b3c38750a1d4b8fe19c67acaa51288310cd9ba5d)
@@ -174,6 +174,6 @@
 extern link_t plb_head;		/**< List of active PLB entries. */
 
-/** Holding this futex prevents extern changes in file system namespace. */ 
-atomic_t namespace_futex;
+/** Holding this rwlock prevents changes in file system namespace. */ 
+extern rwlock_t namespace_rwlock;
 
 extern int vfs_grab_phone(int);
Index: uspace/srv/vfs/vfs_mount.c
===================================================================
--- uspace/srv/vfs/vfs_mount.c	(revision 9413c0d0defe05c5ae4a86bbc19f4184d15f5da3)
+++ uspace/srv/vfs/vfs_mount.c	(revision b3c38750a1d4b8fe19c67acaa51288310cd9ba5d)
@@ -183,5 +183,5 @@
 		 * We already have the root FS.
 		 */
-		futex_down(&namespace_futex);
+		rwlock_writer_lock(&namespace_rwlock);
 		rc = vfs_lookup_internal(buf, size, &mp, NULL);
 		if (rc != EOK) {
@@ -189,5 +189,5 @@
 			 * The lookup failed for some reason.
 			 */
-			futex_up(&namespace_futex);
+			rwlock_writer_unlock(&namespace_rwlock);
 			futex_up(&rootfs_futex);
 			vfs_node_put(mr_node);	/* failed -> drop reference */
@@ -198,5 +198,5 @@
 		mp_node = vfs_node_get(&mp);
 		if (!mp_node) {
-			futex_up(&namespace_futex);
+			rwlock_writer_unlock(&namespace_rwlock);
 			futex_up(&rootfs_futex);
 			vfs_node_put(mr_node);	/* failed -> drop reference */
@@ -210,5 +210,5 @@
 		 * This prevents the mount point from being deleted.
 		 */
-		futex_up(&namespace_futex);
+		rwlock_writer_unlock(&namespace_rwlock);
 	} else {
 		/*
Index: uspace/srv/vfs/vfs_open.c
===================================================================
--- uspace/srv/vfs/vfs_open.c	(revision 9413c0d0defe05c5ae4a86bbc19f4184d15f5da3)
+++ uspace/srv/vfs/vfs_open.c	(revision b3c38750a1d4b8fe19c67acaa51288310cd9ba5d)
@@ -39,5 +39,5 @@
 #include <async.h>
 #include <errno.h>
-#include <futex.h>
+#include <rwlock.h>
 #include <sys/types.h>
 #include <stdlib.h>
@@ -94,5 +94,5 @@
 	 * triplet.
 	 */
-	futex_down(&namespace_futex);
+	rwlock_reader_lock(&namespace_rwlock);
 
 	/*
@@ -102,5 +102,5 @@
 	rc = vfs_lookup_internal(path, size, &triplet, NULL);
 	if (rc) {
-		futex_up(&namespace_futex);
+		rwlock_reader_unlock(&namespace_rwlock);
 		ipc_answer_0(rid, rc);
 		free(path);
@@ -114,5 +114,5 @@
 
 	vfs_node_t *node = vfs_node_get(&triplet);
-	futex_up(&namespace_futex);
+	rwlock_reader_unlock(&namespace_rwlock);
 
 	/*
Index: uspace/srv/vfs/vfs_unlink.c
===================================================================
--- uspace/srv/vfs/vfs_unlink.c	(revision 9413c0d0defe05c5ae4a86bbc19f4184d15f5da3)
+++ uspace/srv/vfs/vfs_unlink.c	(revision b3c38750a1d4b8fe19c67acaa51288310cd9ba5d)
@@ -36,12 +36,11 @@
  */
 
-#include <atomic.h>
-#include <futex.h>
+#include <rwlock.h>
 
 /**
- * This futex prevents the race between a triplet-to-VFS-node resolution and a
+ * This rwlock prevents the race between a triplet-to-VFS-node resolution and a
  * concurrent VFS operation which modifies the file system namespace.
  */
-atomic_t namespace_futex = FUTEX_INITIALIZER;
+RWLOCK_INITIALIZE(namespace_rwlock);
 
 /**
