Btrfs: extent_io and extent_state optimizations
The end_bio routines are changed to take a pointer to the extent state struct, and the state tree is walked in order to set/clear appropriate bits as IO completes. This greatly reduces the number of rbtree searches done by the end_bio handlers, and reduces lock contention. The extent_io releasepage function is changed to avoid expensive searches for locked state. Signed-off-by: Chris Mason <chris.mason@oracle.com>
This commit is contained in:
@@ -274,7 +274,7 @@ int btree_readpage(struct file *file, struct page *page)
|
||||
return extent_read_full_page(tree, page, btree_get_extent);
|
||||
}
|
||||
|
||||
static int btree_releasepage(struct page *page, gfp_t unused_gfp_flags)
|
||||
static int btree_releasepage(struct page *page, gfp_t gfp_flags)
|
||||
{
|
||||
struct extent_io_tree *tree;
|
||||
struct extent_map_tree *map;
|
||||
@@ -282,7 +282,7 @@ static int btree_releasepage(struct page *page, gfp_t unused_gfp_flags)
|
||||
|
||||
tree = &BTRFS_I(page->mapping->host)->io_tree;
|
||||
map = &BTRFS_I(page->mapping->host)->extent_tree;
|
||||
ret = try_release_extent_mapping(map, tree, page);
|
||||
ret = try_release_extent_mapping(map, tree, page, gfp_flags);
|
||||
if (ret == 1) {
|
||||
ClearPagePrivate(page);
|
||||
set_page_private(page, 0);
|
||||
|
Reference in New Issue
Block a user