Index: uspace/lib/libblock/libblock.c
===================================================================
--- uspace/lib/libblock/libblock.c	(revision c1b455ef81f0a7d909a50b79a5328d46c6140609)
+++ uspace/lib/libblock/libblock.c	(revision 48eb7a14a8533358b5a3d4be1e99bb2a217817c7)
@@ -297,8 +297,11 @@
  * @param dev_handle		Device handle of the block device.
  * @param boff			Block offset.
+ * @param flags			If BLOCK_FLAGS_NOREAD is specified, block_get()
+ * 				will not read the contents of the block from the
+ *				device.
  *
  * @return			Block structure.
  */
-block_t *block_get(dev_handle_t dev_handle, bn_t boff)
+block_t *block_get(dev_handle_t dev_handle, bn_t boff, int flags)
 {
 	devcon_t *devcon;
@@ -386,11 +389,13 @@
 			abort();	/* TODO: block_write() */
 		}
-		/*
-		 * The block contains old or no data. We need to read the new
-		 * contents from the device.
-		 */
-		rc = block_read(dev_handle, &bufpos, &buflen, &pos, b->data,
-		    cache->block_size, cache->block_size);
-		assert(rc == EOK);
+		if (!(flags & BLOCK_FLAGS_NOREAD)) {
+			/*
+			 * The block contains old or no data. We need to read
+			 * the new contents from the device.
+			 */
+			rc = block_read(dev_handle, &bufpos, &buflen, &pos,
+			    b->data, cache->block_size, cache->block_size);
+			assert(rc == EOK);
+		}
 
 		futex_up(&b->lock);
Index: uspace/lib/libblock/libblock.h
===================================================================
--- uspace/lib/libblock/libblock.h	(revision c1b455ef81f0a7d909a50b79a5328d46c6140609)
+++ uspace/lib/libblock/libblock.h	(revision 48eb7a14a8533358b5a3d4be1e99bb2a217817c7)
@@ -45,4 +45,20 @@
 #include <libadt/list.h>
 
+/*
+ * Flags that can be used with block_get().
+ */
+
+/** 
+ * This macro is a symbolic value for situations where no special flags are
+ * needed.
+ */
+#define BLOCK_FLAGS_NONE	0
+
+/**
+ * When the client of block_get() intends to overwrite the current contents of
+ * the block, this flag is used to avoid the unnecessary read.
+ */
+#define BLOCK_FLAGS_NOREAD	1
+
 typedef unsigned bn_t;	/**< Block number type. */
 
@@ -78,5 +94,5 @@
 extern int block_cache_init(dev_handle_t, size_t, unsigned);
 
-extern block_t *block_get(dev_handle_t, bn_t);
+extern block_t *block_get(dev_handle_t, bn_t, int flags);
 extern void block_put(block_t *);
 
