aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorDavid Woodhouse <dwmw2@infradead.org>2009-07-22 16:52:13 -0400
committerChris Mason <chris.mason@oracle.com>2009-07-22 16:52:13 -0400
commit83121942b28daffc9526b14b7843d8cdbd3db641 (patch)
tree7440a54bdc12e3aa7c268b9b747204dc0e1e2a5e /fs
parentc271b492419a18908ba19ee02b231fb305a27023 (diff)
Btrfs: Fix crash on read failures at mount
If the tree roots hit read errors during mount, btrfs is not properly erroring out. We need to check the uptodate bits after reading in the tree root node. Signed-off-by: David Woodhouse <David.Woodhouse@intel.com> Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/btrfs/disk-io.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 0d50d49d990a..55d9d188e693 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -1783,6 +1783,11 @@ struct btrfs_root *open_ctree(struct super_block *sb,
1783 btrfs_super_chunk_root(disk_super), 1783 btrfs_super_chunk_root(disk_super),
1784 blocksize, generation); 1784 blocksize, generation);
1785 BUG_ON(!chunk_root->node); 1785 BUG_ON(!chunk_root->node);
1786 if (!test_bit(EXTENT_BUFFER_UPTODATE, &chunk_root->node->bflags)) {
1787 printk(KERN_WARNING "btrfs: failed to read chunk root on %s\n",
1788 sb->s_id);
1789 goto fail_chunk_root;
1790 }
1786 btrfs_set_root_node(&chunk_root->root_item, chunk_root->node); 1791 btrfs_set_root_node(&chunk_root->root_item, chunk_root->node);
1787 chunk_root->commit_root = btrfs_root_node(chunk_root); 1792 chunk_root->commit_root = btrfs_root_node(chunk_root);
1788 1793
@@ -1810,6 +1815,11 @@ struct btrfs_root *open_ctree(struct super_block *sb,
1810 blocksize, generation); 1815 blocksize, generation);
1811 if (!tree_root->node) 1816 if (!tree_root->node)
1812 goto fail_chunk_root; 1817 goto fail_chunk_root;
1818 if (!test_bit(EXTENT_BUFFER_UPTODATE, &tree_root->node->bflags)) {
1819 printk(KERN_WARNING "btrfs: failed to read tree root on %s\n",
1820 sb->s_id);
1821 goto fail_tree_root;
1822 }
1813 btrfs_set_root_node(&tree_root->root_item, tree_root->node); 1823 btrfs_set_root_node(&tree_root->root_item, tree_root->node);
1814 tree_root->commit_root = btrfs_root_node(tree_root); 1824 tree_root->commit_root = btrfs_root_node(tree_root);
1815 1825