summaryrefslogtreecommitdiffstats
path: root/fs/btrfs/file-item.c
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2007-10-15 22:22:25 +0200
committerChris Mason <chris.mason@oracle.com>2008-09-25 17:03:57 +0200
commitff79f8190b6e955ff7a71faf804a3017d526e657 (patch)
treed3f56ae2822eb312eba760dcf4df1a058de5a699 /fs/btrfs/file-item.c
parentBtrfs: Defrag: only walk into nodes with the defrag bit set (diff)
downloadlinux-ff79f8190b6e955ff7a71faf804a3017d526e657.tar.xz
linux-ff79f8190b6e955ff7a71faf804a3017d526e657.zip
Btrfs: Add back file data checksumming
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/file-item.c')
-rw-r--r--fs/btrfs/file-item.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/fs/btrfs/file-item.c b/fs/btrfs/file-item.c
index 9a65e97a4e28..10a4c7408600 100644
--- a/fs/btrfs/file-item.c
+++ b/fs/btrfs/file-item.c
@@ -136,27 +136,27 @@ int btrfs_csum_file_block(struct btrfs_trans_handle *trans,
u64 objectid, u64 offset,
char *data, size_t len)
{
- return 0;
-#if 0
int ret;
struct btrfs_key file_key;
struct btrfs_key found_key;
struct btrfs_path *path;
struct btrfs_csum_item *item;
- struct extent_buffer *leaf;
+ struct extent_buffer *leaf = NULL;
u64 csum_offset;
+ u32 csum_result = ~(u32)0;
path = btrfs_alloc_path();
BUG_ON(!path);
file_key.objectid = objectid;
file_key.offset = offset;
- file_key.flags = 0;
btrfs_set_key_type(&file_key, BTRFS_CSUM_ITEM_KEY);
item = btrfs_lookup_csum(trans, root, path, objectid, offset, 1);
- if (!IS_ERR(item))
+ if (!IS_ERR(item)) {
+ leaf = path->nodes[0];
goto found;
+ }
ret = PTR_ERR(item);
if (ret == -EFBIG) {
u32 item_size;
@@ -226,14 +226,15 @@ csum:
item = (struct btrfs_csum_item *)((unsigned char *)item +
csum_offset * BTRFS_CRC32_SIZE);
found:
- /* FIXME!!!!!!!!!!!! */
- ret = btrfs_csum_data(root, data, len, &item->csum);
+ csum_result = btrfs_csum_data(root, data, csum_result, len);
+ btrfs_csum_final(csum_result, (char *)&csum_result);
+ write_extent_buffer(leaf, &csum_result, (unsigned long)item,
+ BTRFS_CRC32_SIZE);
btrfs_mark_buffer_dirty(path->nodes[0]);
fail:
btrfs_release_path(root, path);
btrfs_free_path(path);
return ret;
-#endif
}
int btrfs_csum_truncate(struct btrfs_trans_handle *trans,