On 29.09.2017 22:43, Josef Bacik wrote: > This is just excessive information in the ref_head, and makes the code > complicated. It is a relic from when we had the heads and the refs in > the same tree, which is no longer the case. With this removal I've > cleaned up a bunch of the cruft around this old assumption as well. > > Signed-off-by: Josef Bacik <jba...@fb.com> > --- > fs/btrfs/backref.c | 4 +- > fs/btrfs/delayed-ref.c | 126 > +++++++++++++++++++------------------------ > fs/btrfs/delayed-ref.h | 49 ++++++----------- > fs/btrfs/disk-io.c | 12 ++--- > fs/btrfs/extent-tree.c | 90 ++++++++++++------------------- > include/trace/events/btrfs.h | 15 +++--- > 6 files changed, 120 insertions(+), 176 deletions(-) > > diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c > index b517ef1477ea..33cba1abf8b6 100644 > --- a/fs/btrfs/backref.c > +++ b/fs/btrfs/backref.c > @@ -1178,7 +1178,7 @@ static int find_parent_nodes(struct btrfs_trans_handle > *trans, > head = btrfs_find_delayed_ref_head(delayed_refs, bytenr); > if (head) { > if (!mutex_trylock(&head->mutex)) { > - refcount_inc(&head->node.refs); > + refcount_inc(&head->refs); > spin_unlock(&delayed_refs->lock); > > btrfs_release_path(path); > @@ -1189,7 +1189,7 @@ static int find_parent_nodes(struct btrfs_trans_handle > *trans, > */ > mutex_lock(&head->mutex); > mutex_unlock(&head->mutex); > - btrfs_put_delayed_ref(&head->node); > + btrfs_put_delayed_ref_head(head); > goto again; > } > spin_unlock(&delayed_refs->lock); > diff --git a/fs/btrfs/delayed-ref.c b/fs/btrfs/delayed-ref.c > index 93ffa898df6d..b9b41c838da4 100644 > --- a/fs/btrfs/delayed-ref.c > +++ b/fs/btrfs/delayed-ref.c > @@ -96,15 +96,15 @@ static struct btrfs_delayed_ref_head *htree_insert(struct > rb_root *root, > u64 bytenr; > > ins = rb_entry(node, struct btrfs_delayed_ref_head, href_node); > - bytenr = ins->node.bytenr; > + bytenr = ins->bytenr; > while (*p) { > parent_node = *p; > entry = rb_entry(parent_node, struct btrfs_delayed_ref_head, > href_node); > > - if (bytenr < entry->node.bytenr) > + if (bytenr < entry->bytenr) > p = &(*p)->rb_left; > - else if (bytenr > entry->node.bytenr) > + else if (bytenr > entry->bytenr) > p = &(*p)->rb_right; > else > return entry; > @@ -133,15 +133,15 @@ find_ref_head(struct rb_root *root, u64 bytenr, > while (n) { > entry = rb_entry(n, struct btrfs_delayed_ref_head, href_node); > > - if (bytenr < entry->node.bytenr) > + if (bytenr < entry->bytenr) > n = n->rb_left; > - else if (bytenr > entry->node.bytenr) > + else if (bytenr > entry->bytenr) > n = n->rb_right; > else > return entry; > } > if (entry && return_bigger) { > - if (bytenr > entry->node.bytenr) { > + if (bytenr > entry->bytenr) { > n = rb_next(&entry->href_node); > if (!n) > n = rb_first(root); > @@ -164,17 +164,17 @@ int btrfs_delayed_ref_lock(struct btrfs_trans_handle > *trans, > if (mutex_trylock(&head->mutex)) > return 0; > > - refcount_inc(&head->node.refs); > + refcount_inc(&head->refs); > spin_unlock(&delayed_refs->lock); > > mutex_lock(&head->mutex); > spin_lock(&delayed_refs->lock); > - if (!head->node.in_tree) { > + if (RB_EMPTY_NODE(&head->href_node)) { > mutex_unlock(&head->mutex); > - btrfs_put_delayed_ref(&head->node); > + btrfs_put_delayed_ref_head(head); > return -EAGAIN; > } > - btrfs_put_delayed_ref(&head->node); > + btrfs_put_delayed_ref_head(head); > return 0; > } > > @@ -183,15 +183,10 @@ static inline void drop_delayed_ref(struct > btrfs_trans_handle *trans, > struct btrfs_delayed_ref_head *head, > struct btrfs_delayed_ref_node *ref) > { > - if (btrfs_delayed_ref_is_head(ref)) { > - head = btrfs_delayed_node_to_head(ref); > - rb_erase(&head->href_node, &delayed_refs->href_root); > - } else { > - assert_spin_locked(&head->lock); > - list_del(&ref->list); > - if (!list_empty(&ref->add_list)) > - list_del(&ref->add_list); > - } > + assert_spin_locked(&head->lock);
lockdep_assert_held -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html