tree_root->nodesize = nodesize;
        tree_root->leafsize = leafsize;
        tree_root->sectorsize = sectorsize;
+       sb_set_blocksize(sb, sectorsize);
 
        i_size_write(fs_info->btree_inode,
                     btrfs_super_total_bytes(disk_super));
 
 int btrfs_clear_buffer_defrag(struct extent_buffer *buf);
 int btrfs_clear_buffer_defrag_done(struct extent_buffer *buf);
 int btrfs_read_buffer(struct extent_buffer *buf);
+u32 btrfs_csum_data(struct btrfs_root *root, char *data, u32 seed, size_t len);
+void btrfs_csum_final(u32 crc, char *result);
 #endif
 
                i = 1;
                index++;
                page_cache_get(page0);
+               mark_page_accessed(page0);
                set_page_extent_mapped(page0);
                set_page_private(page0, EXTENT_PAGE_PRIVATE_FIRST_PAGE |
                                 len << 2);
                        goto fail;
                }
                set_page_extent_mapped(p);
+               mark_page_accessed(p);
                if (i == 0) {
                        eb->first_page = p;
                        set_page_private(p, EXTENT_PAGE_PRIVATE_FIRST_PAGE |
                        goto fail;
                }
                set_page_extent_mapped(p);
+               mark_page_accessed(p);
 
                if (i == 0) {
                        eb->first_page = p;
 
                          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;
        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,
 
         */
        inline_size = end_pos;
        if (isize >= BTRFS_MAX_INLINE_DATA_SIZE(root) ||
+           inline_size > 16384 ||
            inline_size >= BTRFS_MAX_INLINE_DATA_SIZE(root)) {
                u64 last_end;
 
 
        struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
        struct btrfs_csum_item *item;
        struct btrfs_path *path = NULL;
-       u64 private;
+       u32 csum;
 
        mutex_lock(&root->fs_info->fs_mutex);
        path = btrfs_alloc_path();
                /* a csum that isn't present is a preallocated region. */
                if (ret == -ENOENT || ret == -EFBIG)
                        ret = 0;
-               private = 0;
+               csum = 0;
                goto out;
        }
-       memcpy((char *)&private, &item->csum, BTRFS_CRC32_SIZE);
-       set_state_private(em_tree, start, private);
+       read_extent_buffer(path->nodes[0], &csum, (unsigned long)item,
+                          BTRFS_CRC32_SIZE);
+       set_state_private(em_tree, start, csum);
 out:
        if (path)
                btrfs_free_path(path);
        char *kaddr;
        u64 private;
        int ret;
+       struct btrfs_root *root = BTRFS_I(inode)->root;
+       u32 csum = ~(u32)0;
 
        ret = get_state_private(em_tree, start, &private);
        kaddr = kmap_atomic(page, KM_IRQ0);
        if (ret) {
                goto zeroit;
        }
-       /*
-       struct btrfs_root *root = BTRFS_I(inode)->root;
-       char csum[BTRFS_CRC32_SIZE];
-       ret = btrfs_csum_data(root, kaddr + offset, end - start + 1, csum);
-       BUG_ON(ret);
-       if (memcmp(csum, &private, BTRFS_CRC32_SIZE)) {
+       csum = btrfs_csum_data(root, kaddr + offset, csum,  end - start + 1);
+       btrfs_csum_final(csum, (char *)&csum);
+       if (csum != private) {
                goto zeroit;
        }
-       */
        kunmap_atomic(kaddr, KM_IRQ0);
        return 0;