aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/fs/btrfs/inode.c
diff options
context:
space:
mode:
authorLiu Bo <bo.liu@linux.alibaba.com>2018-08-23 03:51:52 +0800
committerDavid Sterba <dsterba@suse.com>2018-10-15 17:23:33 +0200
commit07e1ce096db3605f3e0c98695df66a51e2be9f05 (patch)
tree3e4a910cd136c1b6666d3be7e33b826dbd016db6 /fs/btrfs/inode.c
parentBtrfs: delayed-inode: use rb_first_cached for ins_root and del_root (diff)
downloadwireguard-linux-07e1ce096db3605f3e0c98695df66a51e2be9f05.tar.xz
wireguard-linux-07e1ce096db3605f3e0c98695df66a51e2be9f05.zip
Btrfs: extent_map: use rb_first_cached
rb_first_cached() trades an extra pointer "leftmost" for doing the same job as rb_first() but in O(1). As evict_inode_truncate_pages() removes all extent mapping by always looking for the first rb entry, it's helpful to use rb_first_cached instead. For more details about the optimization see patch "Btrfs: delayed-refs: use rb_first_cached for href_root". Tested-by: Holger Hoffstätte <holger@applied-asynchrony.com> Signed-off-by: Liu Bo <bo.liu@linux.alibaba.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/inode.c')
-rw-r--r--fs/btrfs/inode.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 8ba7e5d5071e..dd2140d3e354 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -5222,10 +5222,10 @@ static void evict_inode_truncate_pages(struct inode *inode)
truncate_inode_pages_final(&inode->i_data);
write_lock(&map_tree->lock);
- while (!RB_EMPTY_ROOT(&map_tree->map)) {
+ while (!RB_EMPTY_ROOT(&map_tree->map.rb_root)) {
struct extent_map *em;
- node = rb_first(&map_tree->map);
+ node = rb_first_cached(&map_tree->map);
em = rb_entry(node, struct extent_map, rb_node);
clear_bit(EXTENT_FLAG_PINNED, &em->flags);
clear_bit(EXTENT_FLAG_LOGGING, &em->flags);