aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/extent-tree.c
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2008-05-12 13:39:03 -0400
committerChris Mason <chris.mason@oracle.com>2008-09-25 11:04:03 -0400
commit1259ab75c62462b8ffad90067b5e1f6312786a18 (patch)
treeccc6b795e524a74b3fb9666409ca2f7f33bf98dd /fs/btrfs/extent-tree.c
parentca7a79ad8dbe24669a8ced01f9fc0126b872745d (diff)
Btrfs: Handle write errors on raid1 and raid10
When duplicate copies exist, writes are allowed to fail to one of those copies. This changeset includes a few changes that allow the FS to continue even when some IOs fail. It also adds verification of the parent generation number for btree blocks. This generation is stored in the pointer to a block, and it ensures that missed writes to are detected. Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/extent-tree.c')
-rw-r--r--fs/btrfs/extent-tree.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index db07dde4a870..605018c6045c 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -1366,7 +1366,7 @@ static int pin_down_bytes(struct btrfs_root *root, u64 bytenr, u32 num_bytes,
1366 if (!pending) { 1366 if (!pending) {
1367 buf = btrfs_find_tree_block(root, bytenr, num_bytes); 1367 buf = btrfs_find_tree_block(root, bytenr, num_bytes);
1368 if (buf) { 1368 if (buf) {
1369 if (btrfs_buffer_uptodate(buf)) { 1369 if (btrfs_buffer_uptodate(buf, 0)) {
1370 u64 transid = 1370 u64 transid =
1371 root->fs_info->running_transaction->transid; 1371 root->fs_info->running_transaction->transid;
1372 u64 header_transid = 1372 u64 header_transid =
@@ -2151,7 +2151,7 @@ static int noinline walk_down_tree(struct btrfs_trans_handle *trans,
2151 continue; 2151 continue;
2152 } 2152 }
2153 next = btrfs_find_tree_block(root, bytenr, blocksize); 2153 next = btrfs_find_tree_block(root, bytenr, blocksize);
2154 if (!next || !btrfs_buffer_uptodate(next)) { 2154 if (!next || !btrfs_buffer_uptodate(next, ptr_gen)) {
2155 free_extent_buffer(next); 2155 free_extent_buffer(next);
2156 reada_walk_down(root, cur, path->slots[*level]); 2156 reada_walk_down(root, cur, path->slots[*level]);
2157 2157