diff --git a/dm-bht.c b/dm-bht.c
index cd50ce0..2a2b49a 100644
--- a/dm-bht.c
+++ b/dm-bht.c
@@ -138,9 +138,6 @@
 static int dm_bht_read_callback_stub(void *ctx, sector_t start, u8 *dst,
 				     sector_t count,
 				     struct dm_bht_entry *entry);
-static int dm_bht_write_callback_stub(void *ctx, sector_t start,
-				      u8 *dst, sector_t count,
-				      struct dm_bht_entry *entry);
 
 /**
  * dm_bht_create - prepares @bht for us
@@ -236,9 +233,8 @@
 		goto bad_level_alloc;
 	}
 
-	/* Setup callback stubs */
+	/* Setup read callback stub */
 	bht->read_cb = &dm_bht_read_callback_stub;
-	bht->write_cb = &dm_bht_write_callback_stub;
 
 	status = dm_bht_initialize_entries(bht);
 	if (status)
@@ -343,15 +339,6 @@
 	return -EIO;
 }
 
-static int dm_bht_write_callback_stub(void *ctx, sector_t start,
-				      u8 *dst, sector_t count,
-				      struct dm_bht_entry *entry)
-{
-	DMCRIT("dm_bht_write_callback_stub called!");
-	dm_bht_write_completed(entry, -EIO);
-	return -EIO;
-}
-
 /**
  * dm_bht_read_completed
  * @entry:	pointer to the entry that's been loaded
@@ -372,24 +359,6 @@
 }
 EXPORT_SYMBOL(dm_bht_read_completed);
 
-/**
- * dm_bht_write_completed
- * @entry:	pointer to the entry that's been loaded
- * @status:	I/O status. Non-zero is failure.
- * Should be called after a write_cb completes. Currently only catches
- * errors which more writers don't care about.
- */
-void dm_bht_write_completed(struct dm_bht_entry *entry, int status)
-{
-	if (status) {
-		DMCRIT("an I/O error occurred while writing entry");
-		atomic_set(&entry->state, DM_BHT_ENTRY_ERROR_IO);
-		/* entry->nodes will be freed later */
-		return;
-	}
-}
-EXPORT_SYMBOL(dm_bht_write_completed);
-
 /* dm_bht_verify_path
  * Verifies the path. Returns 0 on ok.
  */
@@ -653,17 +622,6 @@
 EXPORT_SYMBOL(dm_bht_set_read_cb);
 
 /**
- * dm_bht_set_write_cb - set write callback
- * @bht:	pointer to a dm_bht_create()d bht
- * @write_cb:	callback function used for all write requests by @bht
- */
-void dm_bht_set_write_cb(struct dm_bht *bht, dm_bht_callback write_cb)
-{
-	bht->write_cb = write_cb;
-}
-EXPORT_SYMBOL(dm_bht_set_write_cb);
-
-/**
  * dm_bht_set_root_hexdigest - sets an unverified root digest hash from hex
  * @bht:	pointer to a dm_bht_create()d bht
  * @hexdigest:	array of u8s containing the new digest in binary
diff --git a/dm-bht.h b/dm-bht.h
index 2387c66..923a5f1 100644
--- a/dm-bht.h
+++ b/dm-bht.h
@@ -103,9 +103,8 @@
 	/* bool verified;  Full tree is verified */
 	u8 root_digest[DM_BHT_MAX_DIGEST_SIZE];
 	struct dm_bht_level *levels;  /* in reverse order */
-	/* Callbacks for reading and/or writing to the hash device */
+	/* Callback for reading from the hash device */
 	dm_bht_callback read_cb;
-	dm_bht_callback write_cb;
 };
 
 /* Constructor for struct dm_bht instances. */
@@ -118,7 +117,6 @@
 /* Basic accessors for struct dm_bht */
 sector_t dm_bht_sectors(const struct dm_bht *bht);
 void dm_bht_set_read_cb(struct dm_bht *bht, dm_bht_callback read_cb);
-void dm_bht_set_write_cb(struct dm_bht *bht, dm_bht_callback write_cb);
 int dm_bht_set_root_hexdigest(struct dm_bht *bht, const u8 *hexdigest);
 int dm_bht_root_hexdigest(struct dm_bht *bht, u8 *hexdigest, int available);
 void dm_bht_set_salt(struct dm_bht *bht, const char *hexsalt);
@@ -142,7 +140,6 @@
 int dm_bht_zeroread_callback(void *ctx, sector_t start, u8 *dst, sector_t count,
 			     struct dm_bht_entry *entry);
 void dm_bht_read_completed(struct dm_bht_entry *entry, int status);
-void dm_bht_write_completed(struct dm_bht_entry *entry, int status);
 
 /* Functions for converting indices to nodes. */
 
diff --git a/file_hasher.cc b/file_hasher.cc
index c9bda99..a6282a6 100644
--- a/file_hasher.cc
+++ b/file_hasher.cc
@@ -26,23 +26,6 @@
   return false;
 }
 
-int FileHasher::WriteCallback(void *file,
-                              sector_t start,
-                              u8 *dst,
-                              sector_t count,
-                              struct dm_bht_entry *entry) {
-  simple_file::File *f = reinterpret_cast<simple_file::File *>(file);
-  int offset = static_cast<int>(to_bytes(start));
-  LOG_IF(FATAL, (static_cast<sector_t>(offset) != to_bytes(start)))
-    << "cast to bytes truncated value";
-  if (!f->WriteAt(to_bytes(count), dst, offset)) {
-    dm_bht_write_completed(entry, -EIO);
-    return -1;
-  }
-  dm_bht_write_completed(entry, 0);
-  return 0;
-}
- 
 bool FileHasher::Initialize(simple_file::File *source,
                             simple_file::File *destination,
                             unsigned int blocks,
@@ -82,7 +65,6 @@
   sectors_ = dm_bht_sectors(&tree_);
   hash_data_ = new u8[to_bytes(sectors_)];
 
-  dm_bht_set_write_cb(&tree_, FileHasher::WriteCallback);
   // No reading is needed.
   dm_bht_set_read_cb(&tree_, dm_bht_zeroread_callback);
   dm_bht_set_buffer(&tree_, hash_data_);
