Index: uspace/srv/bd/rd/rd.c
===================================================================
--- uspace/srv/bd/rd/rd.c	(revision ed990cf2ac2aa17dbc00888f91fb91eb26e520d4)
+++ uspace/srv/bd/rd/rd.c	(revision 52e4f52651b2303e6a3937a5e308930b76c22764)
@@ -51,5 +51,5 @@
 #include <align.h>
 #include <async.h>
-#include <futex.h>
+#include <fibril_sync.h>
 #include <stdio.h>
 #include <devmap.h>
@@ -64,10 +64,10 @@
 
 /**
- * This futex protects the ramdisk's data.
+ * This rwlock protects the ramdisk's data.
  * If we were to serve multiple requests (read + write or several writes)
  * concurrently (i.e. from two or more threads), each read and write needs to be
- * protected by this futex.
+ * protected by this rwlock.
  */ 
-atomic_t rd_futex = FUTEX_INITIALIZER;
+fibril_rwlock_t rd_lock;
 
 /** Handle one connection to ramdisk.
@@ -140,7 +140,7 @@
 				break;
 			}
-			futex_down(&rd_futex);
+			fibril_rwlock_read_lock(&rd_lock);
 			memcpy(fs_va, rd_addr + offset * block_size, block_size);
-			futex_up(&rd_futex);
+			fibril_rwlock_read_unlock(&rd_lock);
 			retval = EOK;
 			break;
@@ -162,7 +162,7 @@
 				break;
 			}
-			futex_up(&rd_futex);
+			fibril_rwlock_write_lock(&rd_lock);
 			memcpy(rd_addr + offset * block_size, fs_va, block_size);
-			futex_down(&rd_futex);
+			fibril_rwlock_write_unlock(&rd_lock);
 			retval = EOK;
 			break;
@@ -217,4 +217,6 @@
 		return false;
 	}
+
+	fibril_rwlock_initialize(&rd_lock);
 	
 	return true;
