return ret;
 }
 
-static void set_btree_ioerr(struct page *page)
+static void set_btree_ioerr(struct page *page, struct extent_buffer *eb)
 {
-       struct extent_buffer *eb = (struct extent_buffer *)page->private;
-       struct btrfs_fs_info *fs_info;
+       struct btrfs_fs_info *fs_info = eb->fs_info;
 
-       SetPageError(page);
+       btrfs_page_set_error(fs_info, page, eb->start, eb->len);
        if (test_and_set_bit(EXTENT_BUFFER_WRITE_ERR, &eb->bflags))
                return;
 
         * If we error out, we should add back the dirty_metadata_bytes
         * to make it consistent.
         */
-       fs_info = eb->fs_info;
        percpu_counter_add_batch(&fs_info->dirty_metadata_bytes,
                                 eb->len, fs_info->dirty_metadata_batch);
 
         */
        switch (eb->log_index) {
        case -1:
-               set_bit(BTRFS_FS_BTREE_ERR, &eb->fs_info->flags);
+               set_bit(BTRFS_FS_BTREE_ERR, &fs_info->flags);
                break;
        case 0:
-               set_bit(BTRFS_FS_LOG1_ERR, &eb->fs_info->flags);
+               set_bit(BTRFS_FS_LOG1_ERR, &fs_info->flags);
                break;
        case 1:
-               set_bit(BTRFS_FS_LOG2_ERR, &eb->fs_info->flags);
+               set_bit(BTRFS_FS_LOG2_ERR, &fs_info->flags);
                break;
        default:
                BUG(); /* unexpected, logic error */
                if (bio->bi_status ||
                    test_bit(EXTENT_BUFFER_WRITE_ERR, &eb->bflags)) {
                        ClearPageUptodate(page);
-                       set_btree_ioerr(page);
+                       set_btree_ioerr(page, eb);
                }
 
                end_page_writeback(page);
                                         end_bio_extent_buffer_writepage,
                                         0, 0, 0, false);
                if (ret) {
-                       set_btree_ioerr(p);
+                       set_btree_ioerr(p, eb);
                        if (PageWriteback(p))
                                end_page_writeback(p);
                        if (atomic_sub_and_test(num_pages - i, &eb->io_pages))