tree = &BTRFS_I(page->mapping->host)->io_tree;
        extent_invalidatepage(tree, page, offset);
        btree_releasepage(page, GFP_NOFS);
+       if (PagePrivate(page)) {
+               printk("2invalidate page cleaning up after releasepage\n");
+               ClearPagePrivate(page);
+               set_page_private(page, 0);
+               page_cache_release(page);
+       }
 }
 
 #if 0
        write_ctree_super(NULL, root);
        mutex_unlock(&fs_info->fs_mutex);
 
+       btrfs_transaction_flush_work(root);
+
        if (fs_info->delalloc_bytes) {
                printk("btrfs: at unmount delalloc count %Lu\n",
                       fs_info->delalloc_bytes);
        extent_io_tree_empty_lru(&fs_info->extent_ins);
        extent_io_tree_empty_lru(&BTRFS_I(fs_info->btree_inode)->io_tree);
 
+       flush_workqueue(end_io_workqueue);
+       flush_workqueue(async_submit_workqueue);
+
        truncate_inode_pages(fs_info->btree_inode->i_mapping, 0);
+
        flush_workqueue(end_io_workqueue);
        destroy_workqueue(end_io_workqueue);
 
 
        tree = &BTRFS_I(page->mapping->host)->io_tree;
        extent_invalidatepage(tree, page, offset);
        btrfs_releasepage(page, GFP_NOFS);
+       if (PagePrivate(page)) {
+               printk("invalidate page cleaning up after releasepage\n");
+               ClearPagePrivate(page);
+               set_page_private(page, 0);
+               page_cache_release(page);
+       }
 }
 
 /*