Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1697295

[PATCH 10/20] staging: lustre: ldlm: restore interval_iterate_reverse function

From James Simmons <jsimmons@infradead.org>
Newsgroups linux.kernel
Subject [PATCH 10/20] staging: lustre: ldlm: restore interval_iterate_reverse function
Date 2017-07-26 17:30 +0200
Message-ID <u7wq7-23J-47@gated-at.bofh.it> (permalink)
References <u7wq5-23J-5@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


Earlier the function interval_iterate_reverse function was
removed since it wasn't used by anyone. Now it is being
restored since it will be used by a future patch.

Signed-off-by: James Simmons <jsimmons@infradead.org>
---
 .../staging/lustre/lustre/include/interval_tree.h  |  4 +++
 drivers/staging/lustre/lustre/ldlm/interval_tree.c | 40 ++++++++++++++++++++++
 2 files changed, 44 insertions(+)

diff --git a/drivers/staging/lustre/lustre/include/interval_tree.h b/drivers/staging/lustre/lustre/include/interval_tree.h
index 0d4f92e..a4d7280 100644
--- a/drivers/staging/lustre/lustre/include/interval_tree.h
+++ b/drivers/staging/lustre/lustre/include/interval_tree.h
@@ -111,4 +111,8 @@ enum interval_iter interval_search(struct interval_node *root,
 				   struct interval_node_extent *ex,
 				   interval_callback_t func, void *data);
 
+enum interval_iter interval_iterate_reverse(struct interval_node *root,
+					    interval_callback_t func,
+					    void *data);
+
 #endif
diff --git a/drivers/staging/lustre/lustre/ldlm/interval_tree.c b/drivers/staging/lustre/lustre/ldlm/interval_tree.c
index e106902..5bebd9a 100644
--- a/drivers/staging/lustre/lustre/ldlm/interval_tree.c
+++ b/drivers/staging/lustre/lustre/ldlm/interval_tree.c
@@ -110,6 +110,15 @@ static struct interval_node *interval_first(struct interval_node *node)
 	return node;
 }
 
+static struct interval_node *interval_last(struct interval_node *node)
+{
+	if (!node)
+		return NULL;
+	while (node->in_right)
+		node = node->in_right;
+	return node;
+}
+
 static struct interval_node *interval_next(struct interval_node *node)
 {
 	if (!node)
@@ -121,6 +130,37 @@ static struct interval_node *interval_next(struct interval_node *node)
 	return node->in_parent;
 }
 
+static struct interval_node *interval_prev(struct interval_node *node)
+{
+	if (!node)
+		return NULL;
+
+	if (node->in_left)
+		return interval_last(node->in_left);
+
+	while (node->in_parent && node_is_left_child(node))
+		node = node->in_parent;
+
+	return node->in_parent;
+}
+
+enum interval_iter interval_iterate_reverse(struct interval_node *root,
+					    interval_callback_t func,
+					    void *data)
+{
+	enum interval_iter rc = INTERVAL_ITER_CONT;
+	struct interval_node *node;
+
+	for (node = interval_last(root); node; node = interval_prev(node)) {
+		rc = func(node, data);
+		if (rc == INTERVAL_ITER_STOP)
+			break;
+	}
+
+	return rc;
+}
+EXPORT_SYMBOL(interval_iterate_reverse);
+
 static void __rotate_change_maxhigh(struct interval_node *node,
 				    struct interval_node *rotate)
 {
-- 
1.8.3.1

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 00/20] staging: lustre: batch of fixes to decrease test failures James Simmons <jsimmons@infradead.org> - 2017-07-26 17:30 +0200
  [PATCH 17/20] staging: lustre: llite: allow cached acls James Simmons <jsimmons@infradead.org> - 2017-07-26 17:30 +0200
  [PATCH 04/20] staging: lustre: lov: fix 'control flow' error in lov_io_init_released James Simmons <jsimmons@infradead.org> - 2017-07-26 17:30 +0200
  [PATCH 13/20] staging: lustre: ptlrpc: restore 64-bit time for struct ptlrpc_cli_req James Simmons <jsimmons@infradead.org> - 2017-07-26 17:30 +0200
  [PATCH 06/20] staging: lustre: lmv: assume a real connection in lmv_connect() James Simmons <jsimmons@infradead.org> - 2017-07-26 17:30 +0200
  [PATCH 07/20] staging: lustre: lov: Ensure correct operation for large object sizes James Simmons <jsimmons@infradead.org> - 2017-07-26 17:30 +0200
  [PATCH 11/20] staging: lustre: lustre: fix all less than 0 comparison for unsigned values James Simmons <jsimmons@infradead.org> - 2017-07-26 17:30 +0200
  [PATCH 03/20] staging: lustre: ldlm: crash on umount in cleanup_resource James Simmons <jsimmons@infradead.org> - 2017-07-26 17:30 +0200
  [PATCH 10/20] staging: lustre: ldlm: restore interval_iterate_reverse function James Simmons <jsimmons@infradead.org> - 2017-07-26 17:30 +0200
  [PATCH 14/20] staging: lustre: ptlrpc: don't use CFS_DURATION_T for time64_t James Simmons <jsimmons@infradead.org> - 2017-07-26 17:30 +0200
  [PATCH 08/20] staging: lustre: ptlrpc: correct use of list_add_tail() James Simmons <jsimmons@infradead.org> - 2017-07-26 17:30 +0200
  [PATCH 01/20] staging: lustre: osc: soft lock - osc_makes_rpc() James Simmons <jsimmons@infradead.org> - 2017-07-26 17:30 +0200
  [PATCH 19/20] staging: lustre: llite: add xattr.h header to xattr.c James Simmons <jsimmons@infradead.org> - 2017-07-26 17:30 +0200
  [PATCH 16/20] staging: lustre: libcfs: fix test for libcfs_ioctl_hdr minimum size James Simmons <jsimmons@infradead.org> - 2017-07-26 17:30 +0200
  [PATCH 05/20] staging: lustre: lov: remove unused code James Simmons <jsimmons@infradead.org> - 2017-07-26 17:30 +0200
  [PATCH 20/20] staging: lustre: llite: set security xattr using __vfs_setxattr James Simmons <jsimmons@infradead.org> - 2017-07-26 17:30 +0200
  [PATCH 12/20] staging: lustre: linkea: linkEA size limitation James Simmons <jsimmons@infradead.org> - 2017-07-26 17:30 +0200
  [PATCH 02/20] staging: lustre: ldlm: restore missing newlines in ldlm sysfs files James Simmons <jsimmons@infradead.org> - 2017-07-26 17:30 +0200
  [PATCH 09/20] staging: lustre: ptlrpc: no need to reassign mbits for replay James Simmons <jsimmons@infradead.org> - 2017-07-26 17:30 +0200

csiph-web