Index: uspace/srv/vfs/vfs.h
===================================================================
--- uspace/srv/vfs/vfs.h	(revision c089919e0f883c8edc9b80ced1b7e12813aaff1e)
+++ uspace/srv/vfs/vfs.h	(revision c31d77362341d8d7dd447a40c00284c0a43c3c2b)
@@ -36,5 +36,5 @@
 #include <ipc/ipc.h>
 #include <libadt/list.h>
-#include <atomic.h>
+#include <futex.h>
 #include <rwlock.h>
 #include <sys/types.h>
@@ -108,5 +108,5 @@
 	vfs_info_t vfs_info;
 	int fs_handle;
-	atomic_t phone_futex;	/**< Phone serializing futex. */
+	futex_t phone_futex;	/**< Phone serializing futex. */
 	ipcarg_t phone;
 } fs_info_t;
@@ -233,4 +233,6 @@
 } vfs_file_t;
 
+extern futex_t nodes_futex;
+
 extern link_t fs_head;		/**< List of registered file systems. */
 
@@ -248,5 +250,5 @@
 } plb_entry_t;
 
-extern atomic_t plb_futex;	/**< Futex protecting plb and plb_head. */
+extern futex_t plb_futex;	/**< Futex protecting plb and plb_head. */
 extern uint8_t *plb;		/**< Path Lookup Buffer */
 extern link_t plb_head;		/**< List of active PLB entries. */
Index: uspace/srv/vfs/vfs_lookup.c
===================================================================
--- uspace/srv/vfs/vfs_lookup.c	(revision c089919e0f883c8edc9b80ced1b7e12813aaff1e)
+++ uspace/srv/vfs/vfs_lookup.c	(revision c31d77362341d8d7dd447a40c00284c0a43c3c2b)
@@ -45,10 +45,9 @@
 #include <futex.h>
 #include <libadt/list.h>
-#include <atomic.h>
 #include <vfs/canonify.h>
 
 #define min(a, b)	((a) < (b) ? (a) : (b))
 
-atomic_t plb_futex = FUTEX_INITIALIZER;
+futex_t plb_futex = FUTEX_INITIALIZER;
 link_t plb_head;	/**< PLB entry ring buffer. */
 uint8_t *plb = NULL;
Index: uspace/srv/vfs/vfs_node.c
===================================================================
--- uspace/srv/vfs/vfs_node.c	(revision c089919e0f883c8edc9b80ced1b7e12813aaff1e)
+++ uspace/srv/vfs/vfs_node.c	(revision c31d77362341d8d7dd447a40c00284c0a43c3c2b)
@@ -39,5 +39,4 @@
 #include <stdlib.h>
 #include <string.h>
-#include <atomic.h>
 #include <futex.h>
 #include <rwlock.h>
@@ -48,5 +47,5 @@
 
 /** Futex protecting the VFS node hash table. */
-atomic_t nodes_futex = FUTEX_INITIALIZER;
+futex_t nodes_futex = FUTEX_INITIALIZER;
 
 #define NODES_BUCKETS_LOG	8
Index: uspace/srv/vfs/vfs_ops.c
===================================================================
--- uspace/srv/vfs/vfs_ops.c	(revision c089919e0f883c8edc9b80ced1b7e12813aaff1e)
+++ uspace/srv/vfs/vfs_ops.c	(revision c31d77362341d8d7dd447a40c00284c0a43c3c2b)
@@ -51,5 +51,4 @@
 #include <fcntl.h>
 #include <assert.h>
-#include <atomic.h>
 #include <vfs/canonify.h>
 
@@ -63,5 +62,5 @@
 RWLOCK_INITIALIZE(namespace_rwlock);
 
-atomic_t rootfs_futex = FUTEX_INITIALIZER;
+futex_t rootfs_futex = FUTEX_INITIALIZER;
 vfs_triplet_t rootfs = {
 	.fs_handle = 0,
@@ -687,5 +686,7 @@
 	 */
 	vfs_node_t *node = vfs_node_get(&lr);
+	futex_down(&nodes_futex);
 	node->lnkcnt--;
+	futex_up(&nodes_futex);
 	rwlock_write_unlock(&namespace_rwlock);
 	vfs_node_put(node);
@@ -811,5 +812,7 @@
 			return;
 		}
+		futex_down(&nodes_futex);
 		new_node->lnkcnt--;
+		futex_up(&nodes_futex);
 		break;
 	default:
@@ -831,5 +834,7 @@
 		return;
 	}
+	futex_down(&nodes_futex);
 	old_node->lnkcnt++;
+	futex_up(&nodes_futex);
 	/* Destroy the link for the old name. */
 	rc = vfs_lookup_internal(oldc, L_UNLINK, NULL, NULL);
@@ -844,5 +849,7 @@
 		return;
 	}
+	futex_down(&nodes_futex);
 	old_node->lnkcnt--;
+	futex_up(&nodes_futex);
 	rwlock_write_unlock(&namespace_rwlock);
 	vfs_node_put(old_node);
