disk-io.c (21ad10cf3e9c1ef42e725e5c3a593c49f779a16b) disk-io.c (55c69072d6bd5be170a85467f64a20963cddf490)
1/*
2 * Copyright (C) 2007 Oracle. All rights reserved.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public
6 * License v2 as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,

--- 183 unchanged lines hidden (view full) ---

192 WARN_ON(1);
193 }
194 eb = alloc_extent_buffer(tree, start, len, page, GFP_NOFS);
195 read_extent_buffer_pages(tree, eb, start + PAGE_CACHE_SIZE, 1);
196 found_start = btrfs_header_bytenr(eb);
197 if (found_start != start) {
198 printk("warning: eb start incorrect %Lu buffer %Lu len %lu\n",
199 start, found_start, len);
1/*
2 * Copyright (C) 2007 Oracle. All rights reserved.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public
6 * License v2 as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,

--- 183 unchanged lines hidden (view full) ---

192 WARN_ON(1);
193 }
194 eb = alloc_extent_buffer(tree, start, len, page, GFP_NOFS);
195 read_extent_buffer_pages(tree, eb, start + PAGE_CACHE_SIZE, 1);
196 found_start = btrfs_header_bytenr(eb);
197 if (found_start != start) {
198 printk("warning: eb start incorrect %Lu buffer %Lu len %lu\n",
199 start, found_start, len);
200 WARN_ON(1);
201 goto err;
200 }
202 }
203 if (eb->first_page != page) {
204 printk("bad first page %lu %lu\n", eb->first_page->index,
205 page->index);
206 WARN_ON(1);
207 goto err;
208 }
209 if (!PageUptodate(page)) {
210 printk("csum not up to date page %lu\n", page->index);
211 WARN_ON(1);
212 goto err;
213 }
201 found_level = btrfs_header_level(eb);
202 csum_tree_block(root, eb, 0);
214 found_level = btrfs_header_level(eb);
215 csum_tree_block(root, eb, 0);
216err:
203 free_extent_buffer(eb);
204out:
205 return 0;
206}
207
208static int btree_writepage_io_hook(struct page *page, u64 start, u64 end)
209{
210 struct btrfs_root *root = BTRFS_I(page->mapping->host)->root;

--- 152 unchanged lines hidden (view full) ---

363 unlock_extent(extent_tree, buf->start, end, GFP_NOFS);
364 return buf;
365}
366
367int clean_tree_block(struct btrfs_trans_handle *trans, struct btrfs_root *root,
368 struct extent_buffer *buf)
369{
370 struct inode *btree_inode = root->fs_info->btree_inode;
217 free_extent_buffer(eb);
218out:
219 return 0;
220}
221
222static int btree_writepage_io_hook(struct page *page, u64 start, u64 end)
223{
224 struct btrfs_root *root = BTRFS_I(page->mapping->host)->root;

--- 152 unchanged lines hidden (view full) ---

377 unlock_extent(extent_tree, buf->start, end, GFP_NOFS);
378 return buf;
379}
380
381int clean_tree_block(struct btrfs_trans_handle *trans, struct btrfs_root *root,
382 struct extent_buffer *buf)
383{
384 struct inode *btree_inode = root->fs_info->btree_inode;
371 clear_extent_buffer_dirty(&BTRFS_I(btree_inode)->extent_tree, buf);
385 if (btrfs_header_generation(buf) ==
386 root->fs_info->running_transaction->transid)
387 clear_extent_buffer_dirty(&BTRFS_I(btree_inode)->extent_tree,
388 buf);
372 return 0;
373}
374
375int wait_on_tree_block_writeback(struct btrfs_root *root,
376 struct extent_buffer *buf)
377{
378 struct inode *btree_inode = root->fs_info->btree_inode;
379 wait_on_extent_buffer_writeback(&BTRFS_I(btree_inode)->extent_tree,

--- 512 unchanged lines hidden (view full) ---

892 transid, root->fs_info->generation);
893 WARN_ON(1);
894 }
895 set_extent_buffer_dirty(&BTRFS_I(btree_inode)->extent_tree, buf);
896}
897
898void btrfs_throttle(struct btrfs_root *root)
899{
389 return 0;
390}
391
392int wait_on_tree_block_writeback(struct btrfs_root *root,
393 struct extent_buffer *buf)
394{
395 struct inode *btree_inode = root->fs_info->btree_inode;
396 wait_on_extent_buffer_writeback(&BTRFS_I(btree_inode)->extent_tree,

--- 512 unchanged lines hidden (view full) ---

909 transid, root->fs_info->generation);
910 WARN_ON(1);
911 }
912 set_extent_buffer_dirty(&BTRFS_I(btree_inode)->extent_tree, buf);
913}
914
915void btrfs_throttle(struct btrfs_root *root)
916{
900 if (root->fs_info->throttles)
901 congestion_wait(WRITE, HZ/10);
917 struct backing_dev_info *bdi;
918
919 bdi = root->fs_info->sb->s_bdev->bd_inode->i_mapping->backing_dev_info;
920 if (root->fs_info->throttles && bdi_write_congested(bdi))
921 congestion_wait(WRITE, HZ/20);
902}
903
904void btrfs_btree_balance_dirty(struct btrfs_root *root, unsigned long nr)
905{
906 balance_dirty_pages_ratelimited_nr(
907 root->fs_info->btree_inode->i_mapping, 1);
908}
909

--- 63 unchanged lines hidden ---
922}
923
924void btrfs_btree_balance_dirty(struct btrfs_root *root, unsigned long nr)
925{
926 balance_dirty_pages_ratelimited_nr(
927 root->fs_info->btree_inode->i_mapping, 1);
928}
929

--- 63 unchanged lines hidden ---