From: Peter Zijlstra <peterz@infradead.org>
To: "Roger L. Beckermeyer III" <beckerlee3@gmail.com>
Cc: dsterba@suse.cz, oleg@redhat.com, mhiramat@kernel.org,
linux-kernel@vger.kernel.org, josef@toxicpanda.com,
linux-btrfs@vger.kernel.org, lkp@intel.com
Subject: Re: [PATCH 1/6] rbtree: add rb_find_add_cached() to rbtree.h
Date: Fri, 13 Dec 2024 10:06:13 +0100 [thread overview]
Message-ID: <20241213090613.GC21636@noisy.programming.kicks-ass.net> (raw)
In-Reply-To: <4768e17a808c754748ac9264b5de9e8f00f22380.1733850317.git.beckerlee3@gmail.com>
On Thu, Dec 12, 2024 at 10:46:18AM -0600, Roger L. Beckermeyer III wrote:
> Adds rb_find_add_cached() as a helper function for use with
> red-black trees. Used in btrfs to reduce boilerplate code.
>
> Suggested-by: Josef Bacik <josef@toxicpanda.com>
> Signed-off-by: Roger L. Beckermeyer III <beckerlee3@gmail.com>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
> ---
> include/linux/rbtree.h | 37 +++++++++++++++++++++++++++++++++++++
> 1 file changed, 37 insertions(+)
>
> diff --git a/include/linux/rbtree.h b/include/linux/rbtree.h
> index 7c173aa64e1e..0d4444c0cfb3 100644
> --- a/include/linux/rbtree.h
> +++ b/include/linux/rbtree.h
> @@ -210,6 +210,43 @@ rb_add(struct rb_node *node, struct rb_root *tree,
> rb_insert_color(node, tree);
> }
>
> +/**
> + * rb_find_add_cached() - find equivalent @node in @tree, or add @node
> + * @node: node to look-for / insert
> + * @tree: tree to search / modify
> + * @cmp: operator defining the node order
> + *
> + * Returns the rb_node matching @node, or NULL when no match is found and @node
> + * is inserted.
> + */
> +static __always_inline struct rb_node *
> +rb_find_add_cached(struct rb_node *node, struct rb_root_cached *tree,
> + int (*cmp)(struct rb_node *, const struct rb_node *))
> +{
> + bool leftmost = true;
> + struct rb_node **link = &tree->rb_root.rb_node;
> + struct rb_node *parent = NULL;
> + int c;
> +
> + while (*link) {
> + parent = *link;
> + c = cmp(node, parent);
> +
> + if (c < 0) {
> + link = &parent->rb_left;
> + } else if (c > 0) {
> + link = &parent->rb_right;
> + leftmost = false;
> + } else {
> + return parent;
> + }
> + }
> +
> + rb_link_node(node, parent, link);
> + rb_insert_color_cached(node, tree, leftmost);
> + return NULL;
> +}
> +
> /**
> * rb_find_add() - find equivalent @node in @tree, or add @node
> * @node: node to look-for / insert
> --
> 2.45.2
>
next prev parent reply other threads:[~2024-12-13 9:06 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-08 22:37 [PATCHi 0/6] reduce boilerplate code within btrfs Roger L. Beckermeyer III
2024-12-08 22:38 ` [PATCH] rbtree: add rb_find_add_cached() to rbtree.h Roger L. Beckermeyer III
2024-12-08 22:38 ` [PATCH] btrfs: edit btrfs_add_block_group_cache() to use rb helper Roger L. Beckermeyer III
2024-12-09 5:05 ` kernel test robot
2024-12-08 22:38 ` [PATCH] btrfs: edit prelim_ref_insert() to use rb helpers Roger L. Beckermeyer III
2024-12-09 5:02 ` kernel test robot
2024-12-09 5:06 ` kernel test robot
2024-12-08 22:38 ` [PATCH] btrfs: edit __btrfs_add_delayed_item() to use rb helper Roger L. Beckermeyer III
2024-12-09 5:00 ` kernel test robot
2024-12-09 5:07 ` kernel test robot
2024-12-12 1:18 ` kernel test robot
2024-12-08 22:38 ` [PATCH] btrfs: edit btrfs_add_chunk_map() to use rb helpers Roger L. Beckermeyer III
2024-12-09 5:05 ` kernel test robot
2024-12-09 5:07 ` kernel test robot
2024-12-08 22:38 ` [PATCH] btrfs: edits tree_insert() " Roger L. Beckermeyer III
2024-12-09 5:04 ` kernel test robot
2024-12-09 5:08 ` kernel test robot
2024-12-09 12:36 ` kernel test robot
2024-12-09 12:46 ` Filipe Manana
2024-12-11 22:17 ` kernel test robot
2024-12-09 6:10 ` [PATCHi 0/6] reduce boilerplate code within btrfs Qu Wenruo
2024-12-09 14:05 ` Josef Bacik
2024-12-10 19:06 ` [PATCH " Roger L. Beckermeyer III
2024-12-10 19:06 ` [PATCH 1/6] rbtree: add rb_find_add_cached() to rbtree.h Roger L. Beckermeyer III
2024-12-10 19:58 ` Johannes Thumshirn
2024-12-11 17:47 ` Roger L. Beckermeyer III
2024-12-11 18:41 ` David Sterba
2024-12-12 16:46 ` Roger L. Beckermeyer III
2024-12-13 7:21 ` Qu Wenruo
2024-12-13 9:05 ` Peter Zijlstra
2024-12-13 9:06 ` Peter Zijlstra [this message]
2024-12-16 22:13 ` Qu Wenruo
2024-12-16 22:22 ` Peter Zijlstra
2024-12-16 22:40 ` Qu Wenruo
2024-12-10 19:06 ` [PATCH 2/6] btrfs: edit btrfs_add_block_group_cache() to use rb helper Roger L. Beckermeyer III
2024-12-11 18:45 ` David Sterba
2024-12-11 18:49 ` David Sterba
2024-12-10 19:06 ` [PATCH 3/6] btrfs: edit prelim_ref_insert() to use rb helpers Roger L. Beckermeyer III
2024-12-11 18:47 ` David Sterba
2024-12-10 19:06 ` [PATCH 4/6] btrfs: edit __btrfs_add_delayed_item() to use rb helper Roger L. Beckermeyer III
2024-12-10 19:06 ` [PATCH 5/6] btrfs: edit btrfs_add_chunk_map() to use rb helpers Roger L. Beckermeyer III
2024-12-10 19:06 ` [PATCH 6/6] btrfs: edit tree_insert() " Roger L. Beckermeyer III
2024-12-12 20:29 ` [PATCH 0/6] reduce boilerplate code within btrfs Roger L. Beckermeyer III
2024-12-12 20:29 ` [PATCH 2/6] btrfs: update btrfs_add_block_group_cache() to use rb helpers Roger L. Beckermeyer III
2024-12-13 7:19 ` Qu Wenruo
2024-12-12 20:29 ` [PATCH 3/6] btrfs: update prelim_ref_insert() " Roger L. Beckermeyer III
2024-12-12 20:29 ` [PATCH 4/6] btrfs: update __btrfs_add_delayed_item() " Roger L. Beckermeyer III
2024-12-12 20:29 ` [PATCH 5/6] btrfs: update btrfs_add_chunk_map() " Roger L. Beckermeyer III
2024-12-12 20:29 ` [PATCH 6/6] btrfs: update tree_insert() " Roger L. Beckermeyer III
2024-12-13 6:19 ` Qu Wenruo
2024-12-13 7:30 ` Johannes Thumshirn
2024-12-13 7:32 ` Qu Wenruo
2024-12-13 17:14 ` Lee Beckermeyer
2024-12-13 20:28 ` Qu Wenruo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241213090613.GC21636@noisy.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=beckerlee3@gmail.com \
--cc=dsterba@suse.cz \
--cc=josef@toxicpanda.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lkp@intel.com \
--cc=mhiramat@kernel.org \
--cc=oleg@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox