Index: uspace/srv/bd/rd/rd.c
===================================================================
--- uspace/srv/bd/rd/rd.c	(revision 12956e5768a7adf60aa5e6cc0a70a87007f8ccd4)
+++ uspace/srv/bd/rd/rd.c	(revision af65b727b2d309464d7cc25a7ce3ad5dc5afbdbc)
@@ -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;
