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>
This commit is contained in:
@ -1366,7 +1366,7 @@ static int pin_down_bytes(struct btrfs_root *root, u64 bytenr, u32 num_bytes,
|
||||
if (!pending) {
|
||||
buf = btrfs_find_tree_block(root, bytenr, num_bytes);
|
||||
if (buf) {
|
||||
if (btrfs_buffer_uptodate(buf)) {
|
||||
if (btrfs_buffer_uptodate(buf, 0)) {
|
||||
u64 transid =
|
||||
root->fs_info->running_transaction->transid;
|
||||
u64 header_transid =
|
||||
@ -2151,7 +2151,7 @@ static int noinline walk_down_tree(struct btrfs_trans_handle *trans,
|
||||
continue;
|
||||
}
|
||||
next = btrfs_find_tree_block(root, bytenr, blocksize);
|
||||
if (!next || !btrfs_buffer_uptodate(next)) {
|
||||
if (!next || !btrfs_buffer_uptodate(next, ptr_gen)) {
|
||||
free_extent_buffer(next);
|
||||
reada_walk_down(root, cur, path->slots[*level]);
|
||||
|
||||
|
Reference in New Issue
Block a user