summaryrefslogtreecommitdiffstats
path: root/fs/btrfs/disk-io.c
diff options
context:
space:
mode:
authorChris Mason2007-03-29 15:59:15 +0200
committerDavid Woodhouse2007-03-29 15:59:15 +0200
commit30ae8467483d7ab023b5e728bf7d74a575c78023 (patch)
treeb61966823c4d1a4b30f28ca94eb6bafeb3e3be5e /fs/btrfs/disk-io.c
parentBtrfs: sha256 csums on metadata (diff)
downloadkernel-qcow2-linux-30ae8467483d7ab023b5e728bf7d74a575c78023.tar.gz
kernel-qcow2-linux-30ae8467483d7ab023b5e728bf7d74a575c78023.tar.xz
kernel-qcow2-linux-30ae8467483d7ab023b5e728bf7d74a575c78023.zip
Btrfs: btree address space fixes
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/disk-io.c')
-rw-r--r--fs/btrfs/disk-io.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 2afb7922b062..f2c1dd40c087 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -69,7 +69,6 @@ struct buffer_head *btrfs_find_create_tree_block(struct btrfs_root *root,
if (!page)
return NULL;
- wait_on_page_writeback(page);
if (!page_has_buffers(page))
create_empty_buffers(page, root->fs_info->sb->s_blocksize, 0);
head = page_buffers(page);
@@ -300,11 +299,12 @@ struct btrfs_root *open_ctree(struct super_block *sb,
fs_info->btree_inode->i_mapping->a_ops = &btree_aops;
mapping_set_gfp_mask(fs_info->btree_inode->i_mapping, GFP_NOFS);
fs_info->hash_tfm = crypto_alloc_hash("sha256", 0, CRYPTO_ALG_ASYNC);
- if (!fs_info->hash_tfm) {
+ spin_lock_init(&fs_info->hash_lock);
+
+ if (!fs_info->hash_tfm || IS_ERR(fs_info->hash_tfm)) {
printk("failed to allocate sha256 hash\n");
return NULL;
}
- spin_lock_init(&fs_info->hash_lock);
mutex_init(&fs_info->trans_mutex);
mutex_init(&fs_info->fs_mutex);
@@ -394,6 +394,7 @@ int close_ctree(struct btrfs_root *root)
btrfs_block_release(root, root->commit_root);
btrfs_block_release(root, root->fs_info->sb_buffer);
crypto_free_hash(root->fs_info->hash_tfm);
+ truncate_inode_pages(root->fs_info->btree_inode->i_mapping, 0);
iput(root->fs_info->btree_inode);
kfree(root->fs_info->extent_root);
kfree(root->fs_info->inode_root);