}
        }
 
-       return dm_bm_unlock(b);
+       dm_bm_unlock(b);
+
+       return 0;
 }
 
 static void __setup_mapping_info(struct dm_cache_metadata *cmd)
        dm_disk_bitset_init(cmd->tm, &cmd->discard_info);
        sb_flags = le32_to_cpu(disk_super->flags);
        cmd->clean_when_opened = test_bit(CLEAN_SHUTDOWN, &sb_flags);
-       return dm_bm_unlock(sblock);
+       dm_bm_unlock(sblock);
+
+       return 0;
 
 bad:
        dm_bm_unlock(sblock);
 
                }
        }
 
-       return dm_bm_unlock(b);
+       dm_bm_unlock(b);
+
+       return 0;
 }
 
 /*----------------------------------------------------------------*/
        md->metadata_snap = le64_to_cpu(disk->metadata_snap);
        md->archived_writesets = true;
 
-       return dm_bm_unlock(sblock);
+       dm_bm_unlock(sblock);
+
+       return 0;
 
 bad:
        dm_bm_unlock(sblock);
 
        md->metadata_snap = dm_block_location(clone);
 
-       r = dm_tm_unlock(md->tm, clone);
-       if (r) {
-               DMERR("%s: couldn't unlock clone", __func__);
-               md->metadata_snap = SUPERBLOCK_LOCATION;
-               return r;
-       }
+       dm_tm_unlock(md->tm, clone);
 
        return 0;
 }
 
                }
        }
 
-       return dm_bm_unlock(b);
+       dm_bm_unlock(b);
+
+       return 0;
 }
 
 static void __setup_btree_details(struct dm_pool_metadata *pmd)
        }
 
        __setup_btree_details(pmd);
-       return dm_bm_unlock(sblock);
+       dm_bm_unlock(sblock);
+
+       return 0;
 
 bad_cleanup_data_sm:
        dm_sm_destroy(pmd->data_sm);
        dm_btree_del(&pmd->details_info, le64_to_cpu(disk_super->device_details_root));
        dm_sm_dec_block(pmd->metadata_sm, held_root);
 
-       return dm_tm_unlock(pmd->tm, copy);
+       dm_tm_unlock(pmd->tm, copy);
+
+       return 0;
 }
 
 int dm_pool_release_metadata_snap(struct dm_pool_metadata *pmd)
        disk_super = dm_block_data(sblock);
        *result = le64_to_cpu(disk_super->held_root);
 
-       return dm_bm_unlock(sblock);
+       dm_bm_unlock(sblock);
+
+       return 0;
 }
 
 int dm_pool_get_metadata_snap(struct dm_pool_metadata *pmd,
 
 /*
  * Unlocks an array block.
  */
-static int unlock_ablock(struct dm_array_info *info, struct dm_block *block)
+static void unlock_ablock(struct dm_array_info *info, struct dm_block *block)
 {
-       return dm_tm_unlock(info->btree_info.tm, block);
+       dm_tm_unlock(info->btree_info.tm, block);
 }
 
 /*----------------------------------------------------------------*/
 
 }
 EXPORT_SYMBOL_GPL(dm_bm_write_lock_zero);
 
-int dm_bm_unlock(struct dm_block *b)
+void dm_bm_unlock(struct dm_block *b)
 {
        struct buffer_aux *aux;
        aux = dm_bufio_get_aux_data(to_buffer(b));
                bl_up_read(&aux->lock);
 
        dm_bufio_release(to_buffer(b));
-
-       return 0;
 }
 EXPORT_SYMBOL_GPL(dm_bm_unlock);
 
 
                          struct dm_block_validator *v,
                          struct dm_block **result);
 
-int dm_bm_unlock(struct dm_block *b);
+void dm_bm_unlock(struct dm_block *b);
 
 /*
  * It's a common idiom to have a superblock that should be committed last.
 
                  struct dm_btree_value_type *vt);
 
 int new_block(struct dm_btree_info *info, struct dm_block **result);
-int unlock_block(struct dm_btree_info *info, struct dm_block *b);
+void unlock_block(struct dm_btree_info *info, struct dm_block *b);
 
 /*
  * Spines keep track of the rolling locks.  There are 2 variants, read-only
 
        return 0;
 }
 
-static int exit_child(struct dm_btree_info *info, struct child *c)
+static void exit_child(struct dm_btree_info *info, struct child *c)
 {
-       return dm_tm_unlock(info->tm, c->block);
+       dm_tm_unlock(info->tm, c->block);
 }
 
 static void shift(struct btree_node *left, struct btree_node *right, int count)
 
        __rebalance2(info, parent, &left, &right);
 
-       r = exit_child(info, &left);
-       if (r) {
-               exit_child(info, &right);
-               return r;
-       }
+       exit_child(info, &left);
+       exit_child(info, &right);
 
-       return exit_child(info, &right);
+       return 0;
 }
 
 /*
 
        __rebalance3(info, parent, &left, ¢er, &right);
 
-       r = exit_child(info, &left);
-       if (r) {
-               exit_child(info, ¢er);
-               exit_child(info, &right);
-               return r;
-       }
-
-       r = exit_child(info, ¢er);
-       if (r) {
-               exit_child(info, &right);
-               return r;
-       }
-
-       r = exit_child(info, &right);
-       if (r)
-               return r;
+       exit_child(info, &left);
+       exit_child(info, ¢er);
+       exit_child(info, &right);
 
        return 0;
 }
 
                memcpy(n, dm_block_data(child),
                       dm_bm_block_size(dm_tm_get_bm(info->tm)));
-               r = dm_tm_unlock(info->tm, child);
-               if (r)
-                       return r;
+               dm_tm_unlock(info->tm, child);
 
                dm_tm_dec(info->tm, dm_block_location(child));
                return 0;
 
        return dm_tm_new_block(info->tm, &btree_node_validator, result);
 }
 
-int unlock_block(struct dm_btree_info *info, struct dm_block *b)
+void unlock_block(struct dm_btree_info *info, struct dm_block *b)
 {
-       return dm_tm_unlock(info->tm, b);
+       dm_tm_unlock(info->tm, b);
 }
 
 /*----------------------------------------------------------------*/
        int r = 0, i;
 
        for (i = 0; i < s->count; i++) {
-               int r2 = unlock_block(s->info, s->nodes[i]);
-               if (r2 < 0)
-                       r = r2;
+               unlock_block(s->info, s->nodes[i]);
        }
 
        return r;
        int r;
 
        if (s->count == 2) {
-               r = unlock_block(s->info, s->nodes[0]);
-               if (r < 0)
-                       return r;
+               unlock_block(s->info, s->nodes[0]);
                s->nodes[0] = s->nodes[1];
                s->count--;
        }
        int r = 0, i;
 
        for (i = 0; i < s->count; i++) {
-               int r2 = unlock_block(s->info, s->nodes[i]);
-               if (r2 < 0)
-                       r = r2;
+               unlock_block(s->info, s->nodes[i]);
        }
 
        return r;
        int r;
 
        if (s->count == 2) {
-               r = unlock_block(s->info, s->nodes[0]);
-               if (r < 0)
-                       return r;
+               unlock_block(s->info, s->nodes[0]);
                s->nodes[0] = s->nodes[1];
                s->count--;
        }
 
        n->header.value_size = cpu_to_le32(info->value_type.size);
 
        *root = dm_block_location(b);
-       return unlock_block(info, b);
+       unlock_block(info, b);
+
+       return 0;
 }
 EXPORT_SYMBOL_GPL(dm_btree_empty);
 
 
 
                idx.blocknr = cpu_to_le64(dm_block_location(b));
 
-               r = dm_tm_unlock(ll->tm, b);
-               if (r < 0)
-                       return r;
+               dm_tm_unlock(ll->tm, b);
 
                idx.nr_free = cpu_to_le32(ll->entries_per_block);
                idx.none_free_before = 0;
 
        *result = sm_lookup_bitmap(dm_bitmap_data(blk), b);
 
-       return dm_tm_unlock(ll->tm, blk);
+       dm_tm_unlock(ll->tm, blk);
+
+       return 0;
 }
 
 static int sm_ll_lookup_big_ref_count(struct ll_disk *ll, dm_block_t b,
                        return r;
                }
 
-               r = dm_tm_unlock(ll->tm, blk);
-               if (r < 0)
-                       return r;
+               dm_tm_unlock(ll->tm, blk);
 
                *result = i * ll->entries_per_block + (dm_block_t) position;
                return 0;
        if (ref_count <= 2) {
                sm_set_bitmap(bm_le, bit, ref_count);
 
-               r = dm_tm_unlock(ll->tm, nb);
-               if (r < 0)
-                       return r;
+               dm_tm_unlock(ll->tm, nb);
 
                if (old > 2) {
                        r = dm_btree_remove(&ll->ref_count_info,
                __le32 le_rc = cpu_to_le32(ref_count);
 
                sm_set_bitmap(bm_le, bit, 3);
-               r = dm_tm_unlock(ll->tm, nb);
-               if (r < 0)
-                       return r;
+               dm_tm_unlock(ll->tm, nb);
 
                __dm_bless_for_disk(&le_rc);
                r = dm_btree_insert(&ll->ref_count_info, ll->ref_count_root,
        memcpy(dm_block_data(b), &ll->mi_le, sizeof(ll->mi_le));
        ll->bitmap_root = dm_block_location(b);
 
-       return dm_tm_unlock(ll->tm, b);
+       dm_tm_unlock(ll->tm, b);
+
+       return 0;
 }
 
 static int metadata_ll_open(struct ll_disk *ll)
                return r;
 
        memcpy(&ll->mi_le, dm_block_data(block), sizeof(ll->mi_le));
-       return dm_tm_unlock(ll->tm, block);
+       dm_tm_unlock(ll->tm, block);
+
+       return 0;
 }
 
 static dm_block_t metadata_ll_max_entries(struct ll_disk *ll)
        memcpy(dm_block_data(b), &ll->mi_le, sizeof(ll->mi_le));
        ll->bitmap_root = dm_block_location(b);
 
-       return dm_tm_unlock(ll->tm, b);
+       dm_tm_unlock(ll->tm, b);
+
+       return 0;
 }
 
 int sm_ll_new_metadata(struct ll_disk *ll, struct dm_transaction_manager *tm)
 
 }
 EXPORT_SYMBOL_GPL(dm_tm_read_lock);
 
-int dm_tm_unlock(struct dm_transaction_manager *tm, struct dm_block *b)
+void dm_tm_unlock(struct dm_transaction_manager *tm, struct dm_block *b)
 {
-       return dm_bm_unlock(b);
+       dm_bm_unlock(b);
 }
 EXPORT_SYMBOL_GPL(dm_tm_unlock);
 
 
                    struct dm_block_validator *v,
                    struct dm_block **result);
 
-int dm_tm_unlock(struct dm_transaction_manager *tm, struct dm_block *b);
+void dm_tm_unlock(struct dm_transaction_manager *tm, struct dm_block *b);
 
 /*
  * Functions for altering the reference count of a block directly.