Btrfs: process the delayed reference queue in clusters
authorChris Mason <chris.mason@oracle.com>
Fri, 13 Mar 2009 14:17:05 +0000 (10:17 -0400)
committerChris Mason <chris.mason@oracle.com>
Tue, 24 Mar 2009 20:14:26 +0000 (16:14 -0400)
commitc3e69d58e86c3917ae4e9e31b4acf490a7cafe60
treebd4f1e62446a208bdae26f0c36d67e3afbc1cd1d
parent1887be66dcc3140a81d1299958a41fc0eedfa64f
Btrfs: process the delayed reference queue in clusters

The delayed reference queue maintains pending operations that need to
be done to the extent allocation tree.  These are processed by
finding records in the tree that are not currently being processed one at
a time.

This is slow because it uses lots of time searching through the rbtree
and because it creates lock contention on the extent allocation tree
when lots of different procs are running delayed refs at the same time.

This commit changes things to grab a cluster of refs for processing,
using a cursor into the rbtree as the starting point of the next search.
This way we walk smoothly through the rbtree.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/ctree.h
fs/btrfs/delayed-ref.c
fs/btrfs/delayed-ref.h
fs/btrfs/disk-io.c
fs/btrfs/extent-tree.c
fs/btrfs/transaction.c