summaryrefslogtreecommitdiff
path: root/utils.c
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2008-04-09 16:28:12 -0400
committerDavid Woodhouse <dwmw2@hera.kernel.org>2008-04-09 16:28:12 -0400
commitfd2d0af0bf80c127fbb3b84817a420fbc490da5d (patch)
treeeb9145973922aed41e23bba86d6fb01cc0fbb8ec /utils.c
parent1b74adf90b95af77a2826dc82cf5c5f38af90e52 (diff)
Retry metadata reads in the face of checksum failures
Diffstat (limited to 'utils.c')
-rw-r--r--utils.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/utils.c b/utils.c
index 55d3f5f1..9d162da7 100644
--- a/utils.c
+++ b/utils.c
@@ -106,6 +106,7 @@ int make_btrfs(int fd, char *device_name,
/* create the tree of root objects */
memset(buf->data, 0, leafsize);
+ buf->len = leafsize;
btrfs_set_header_bytenr(buf, blocks[1]);
btrfs_set_header_nritems(buf, 3);
btrfs_set_header_generation(buf, 1);
@@ -165,6 +166,7 @@ int make_btrfs(int fd, char *device_name,
nritems++;
+ csum_tree_block(NULL, buf, 0);
ret = pwrite(fd, buf->data, leafsize, blocks[1]);
BUG_ON(ret != leafsize);
@@ -229,6 +231,7 @@ int make_btrfs(int fd, char *device_name,
btrfs_set_header_bytenr(buf, blocks[2]);
btrfs_set_header_owner(buf, BTRFS_EXTENT_TREE_OBJECTID);
btrfs_set_header_nritems(buf, nritems);
+ csum_tree_block(NULL, buf, 0);
ret = pwrite(fd, buf->data, leafsize, blocks[2]);
BUG_ON(ret != leafsize);
@@ -302,6 +305,7 @@ int make_btrfs(int fd, char *device_name,
btrfs_set_header_bytenr(buf, blocks[3]);
btrfs_set_header_owner(buf, BTRFS_CHUNK_TREE_OBJECTID);
btrfs_set_header_nritems(buf, nritems);
+ csum_tree_block(NULL, buf, 0);
ret = pwrite(fd, buf->data, leafsize, blocks[3]);
/* create the device tree */
@@ -325,12 +329,14 @@ int make_btrfs(int fd, char *device_name,
btrfs_set_header_bytenr(buf, blocks[4]);
btrfs_set_header_owner(buf, BTRFS_DEV_TREE_OBJECTID);
btrfs_set_header_nritems(buf, nritems);
+ csum_tree_block(NULL, buf, 0);
ret = pwrite(fd, buf->data, leafsize, blocks[4]);
/* finally create the FS root */
btrfs_set_header_bytenr(buf, blocks[5]);
btrfs_set_header_owner(buf, BTRFS_FS_TREE_OBJECTID);
btrfs_set_header_nritems(buf, 0);
+ csum_tree_block(NULL, buf, 0);
ret = pwrite(fd, buf->data, leafsize, blocks[5]);
BUG_ON(ret != leafsize);
@@ -338,6 +344,8 @@ int make_btrfs(int fd, char *device_name,
BUG_ON(sizeof(super) > sectorsize);
memset(buf->data, 0, sectorsize);
memcpy(buf->data, &super, sizeof(super));
+ buf->len = sectorsize;
+ csum_tree_block(NULL, buf, 0);
ret = pwrite(fd, buf->data, sectorsize, blocks[0]);
BUG_ON(ret != sectorsize);