public inbox for linux-btrfs@vger.kernel.org
 help / color / mirror / Atom feed
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
> 

  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