From a1f6c84ad55c01388085487a68012507b3ba095e Mon Sep 17 00:00:00 2001 From: phil Date: Wed, 21 Jan 2004 00:31:13 +0000 Subject: [PATCH] - removes unused rbtree landmine - reorders ldlm_cli_enqueue arguments to be consistent - the beginnings of an async completion AST, comprised mostly of false starts that I will possibly discard in the end --- lustre/include/linux/rbtree.h | 132 ----------------- lustre/mdc/mdc_locks.c | 5 +- lustre/obdclass/rbtree.c | 338 ------------------------------------------ 3 files changed, 3 insertions(+), 472 deletions(-) delete mode 100644 lustre/include/linux/rbtree.h delete mode 100644 lustre/obdclass/rbtree.c diff --git a/lustre/include/linux/rbtree.h b/lustre/include/linux/rbtree.h deleted file mode 100644 index e35ddc7..0000000 --- a/lustre/include/linux/rbtree.h +++ /dev/null @@ -1,132 +0,0 @@ -/* - Red Black Trees - (C) 1999 Andrea Arcangeli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - linux/include/linux/rbtree.h - - To use rbtrees you'll have to implement your own insert and search cores. - This will avoid us to use callbacks and to drop drammatically performances. - I know it's not the cleaner way, but in C (not in C++) to get - performances and genericity... - - Some example of insert and search follows here. The search is a plain - normal search over an ordered tree. The insert instead must be implemented - int two steps: as first thing the code must insert the element in - order as a red leaf in the tree, then the support library function - rb_insert_color() must be called. Such function will do the - not trivial work to rebalance the rbtree if necessary. - ------------------------------------------------------------------------ -static inline struct page * rb_search_page_cache(struct inode * inode, - unsigned long offset) -{ - rb_node_t * n = inode->i_rb_page_cache.rb_node; - struct page * page; - - while (n) - { - page = rb_entry(n, struct page, rb_page_cache); - - if (offset < page->offset) - n = n->rb_left; - else if (offset > page->offset) - n = n->rb_right; - else - return page; - } - return NULL; -} - -static inline struct page * __rb_insert_page_cache(struct inode * inode, - unsigned long offset, - rb_node_t * node) -{ - rb_node_t ** p = &inode->i_rb_page_cache.rb_node; - rb_node_t * parent = NULL; - struct page * page; - - while (*p) - { - parent = *p; - page = rb_entry(parent, struct page, rb_page_cache); - - if (offset < page->offset) - p = &(*p)->rb_left; - else if (offset > page->offset) - p = &(*p)->rb_right; - else - return page; - } - - rb_link_node(node, parent, p); - - return NULL; -} - -static inline struct page * rb_insert_page_cache(struct inode * inode, - unsigned long offset, - rb_node_t * node) -{ - struct page * ret; - if ((ret = __rb_insert_page_cache(inode, offset, node))) - goto out; - rb_insert_color(node, &inode->i_rb_page_cache); - out: - return ret; -} ------------------------------------------------------------------------ -*/ - -#ifndef _LINUX_RBTREE_H -#define _LINUX_RBTREE_H - -typedef struct rb_node_s -{ - struct rb_node_s * rb_parent; - int rb_color; -#define RB_RED 0 -#define RB_BLACK 1 - struct rb_node_s * rb_right; - struct rb_node_s * rb_left; -} -rb_node_t; - -typedef struct rb_root_s -{ - struct rb_node_s * rb_node; -} -rb_root_t; - -#define RB_ROOT (rb_root_t) { NULL, } -#define rb_entry(ptr, type, member) \ - ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))) - -extern void rb_insert_color(rb_node_t *, rb_root_t *); -extern void rb_erase(rb_node_t *, rb_root_t *); -extern rb_node_t *rb_get_first(rb_root_t *root); -extern rb_node_t *rb_get_next(rb_node_t *n); - -static inline void rb_link_node(rb_node_t * node, rb_node_t * parent, rb_node_t ** rb_link) -{ - node->rb_parent = parent; - node->rb_color = RB_RED; - node->rb_left = node->rb_right = NULL; - - *rb_link = node; -} - -#endif /* _LINUX_RBTREE_H */ diff --git a/lustre/mdc/mdc_locks.c b/lustre/mdc/mdc_locks.c index 0ac2e3c..a2830b8 100644 --- a/lustre/mdc/mdc_locks.c +++ b/lustre/mdc/mdc_locks.c @@ -285,8 +285,9 @@ int mdc_enqueue(struct obd_export *exp, mdc_get_rpc_lock(obddev->u.cli.cl_rpc_lock, it); rc = ldlm_cli_enqueue(exp, req, obddev->obd_namespace, res_id, - lock_type, NULL, lock_mode, &flags, cb_completion, - cb_blocking, NULL, cb_data, NULL, 0, NULL, lockh); + lock_type, NULL, lock_mode, &flags, cb_blocking, + cb_completion, NULL, cb_data, NULL, 0, NULL, + lockh); mdc_put_rpc_lock(obddev->u.cli.cl_rpc_lock, it); /* Similarly, if we're going to replay this request, we don't want to diff --git a/lustre/obdclass/rbtree.c b/lustre/obdclass/rbtree.c deleted file mode 100644 index 9d393d3..0000000 --- a/lustre/obdclass/rbtree.c +++ /dev/null @@ -1,338 +0,0 @@ -/* - Red Black Trees - (C) 1999 Andrea Arcangeli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - linux/lib/rbtree.c - - rb_get_first and rb_get_next written by Theodore Ts'o, 9/8/2002 -*/ - -#include -#include - -static void __rb_rotate_left(rb_node_t * node, rb_root_t * root) -{ - rb_node_t * right = node->rb_right; - - if ((node->rb_right = right->rb_left)) - right->rb_left->rb_parent = node; - right->rb_left = node; - - if ((right->rb_parent = node->rb_parent)) - { - if (node == node->rb_parent->rb_left) - node->rb_parent->rb_left = right; - else - node->rb_parent->rb_right = right; - } - else - root->rb_node = right; - node->rb_parent = right; -} - -static void __rb_rotate_right(rb_node_t * node, rb_root_t * root) -{ - rb_node_t * left = node->rb_left; - - if ((node->rb_left = left->rb_right)) - left->rb_right->rb_parent = node; - left->rb_right = node; - - if ((left->rb_parent = node->rb_parent)) - { - if (node == node->rb_parent->rb_right) - node->rb_parent->rb_right = left; - else - node->rb_parent->rb_left = left; - } - else - root->rb_node = left; - node->rb_parent = left; -} - -void rb_insert_color(rb_node_t * node, rb_root_t * root) -{ - rb_node_t * parent, * gparent; - - while ((parent = node->rb_parent) && parent->rb_color == RB_RED) - { - gparent = parent->rb_parent; - - if (parent == gparent->rb_left) - { - { - register rb_node_t * uncle = gparent->rb_right; - if (uncle && uncle->rb_color == RB_RED) - { - uncle->rb_color = RB_BLACK; - parent->rb_color = RB_BLACK; - gparent->rb_color = RB_RED; - node = gparent; - continue; - } - } - - if (parent->rb_right == node) - { - register rb_node_t * tmp; - __rb_rotate_left(parent, root); - tmp = parent; - parent = node; - node = tmp; - } - - parent->rb_color = RB_BLACK; - gparent->rb_color = RB_RED; - __rb_rotate_right(gparent, root); - } else { - { - register rb_node_t * uncle = gparent->rb_left; - if (uncle && uncle->rb_color == RB_RED) - { - uncle->rb_color = RB_BLACK; - parent->rb_color = RB_BLACK; - gparent->rb_color = RB_RED; - node = gparent; - continue; - } - } - - if (parent->rb_left == node) - { - register rb_node_t * tmp; - __rb_rotate_right(parent, root); - tmp = parent; - parent = node; - node = tmp; - } - - parent->rb_color = RB_BLACK; - gparent->rb_color = RB_RED; - __rb_rotate_left(gparent, root); - } - } - - root->rb_node->rb_color = RB_BLACK; -} -EXPORT_SYMBOL(rb_insert_color); - -static void __rb_erase_color(rb_node_t * node, rb_node_t * parent, - rb_root_t * root) -{ - rb_node_t * other; - - while ((!node || node->rb_color == RB_BLACK) && node != root->rb_node) - { - if (parent->rb_left == node) - { - other = parent->rb_right; - if (other->rb_color == RB_RED) - { - other->rb_color = RB_BLACK; - parent->rb_color = RB_RED; - __rb_rotate_left(parent, root); - other = parent->rb_right; - } - if ((!other->rb_left || - other->rb_left->rb_color == RB_BLACK) - && (!other->rb_right || - other->rb_right->rb_color == RB_BLACK)) - { - other->rb_color = RB_RED; - node = parent; - parent = node->rb_parent; - } - else - { - if (!other->rb_right || - other->rb_right->rb_color == RB_BLACK) - { - register rb_node_t * o_left; - if ((o_left = other->rb_left)) - o_left->rb_color = RB_BLACK; - other->rb_color = RB_RED; - __rb_rotate_right(other, root); - other = parent->rb_right; - } - other->rb_color = parent->rb_color; - parent->rb_color = RB_BLACK; - if (other->rb_right) - other->rb_right->rb_color = RB_BLACK; - __rb_rotate_left(parent, root); - node = root->rb_node; - break; - } - } - else - { - other = parent->rb_left; - if (other->rb_color == RB_RED) - { - other->rb_color = RB_BLACK; - parent->rb_color = RB_RED; - __rb_rotate_right(parent, root); - other = parent->rb_left; - } - if ((!other->rb_left || - other->rb_left->rb_color == RB_BLACK) - && (!other->rb_right || - other->rb_right->rb_color == RB_BLACK)) - { - other->rb_color = RB_RED; - node = parent; - parent = node->rb_parent; - } - else - { - if (!other->rb_left || - other->rb_left->rb_color == RB_BLACK) - { - register rb_node_t * o_right; - if ((o_right = other->rb_right)) - o_right->rb_color = RB_BLACK; - other->rb_color = RB_RED; - __rb_rotate_left(other, root); - other = parent->rb_left; - } - other->rb_color = parent->rb_color; - parent->rb_color = RB_BLACK; - if (other->rb_left) - other->rb_left->rb_color = RB_BLACK; - __rb_rotate_right(parent, root); - node = root->rb_node; - break; - } - } - } - if (node) - node->rb_color = RB_BLACK; -} - -void rb_erase(rb_node_t * node, rb_root_t * root) -{ - rb_node_t * child, * parent; - int color; - - if (!node->rb_left) - child = node->rb_right; - else if (!node->rb_right) - child = node->rb_left; - else - { - rb_node_t * old = node, * left; - - node = node->rb_right; - while ((left = node->rb_left)) - node = left; - child = node->rb_right; - parent = node->rb_parent; - color = node->rb_color; - - if (child) - child->rb_parent = parent; - if (parent) - { - if (parent->rb_left == node) - parent->rb_left = child; - else - parent->rb_right = child; - } - else - root->rb_node = child; - - if (node->rb_parent == old) - parent = node; - node->rb_parent = old->rb_parent; - node->rb_color = old->rb_color; - node->rb_right = old->rb_right; - node->rb_left = old->rb_left; - - if (old->rb_parent) - { - if (old->rb_parent->rb_left == old) - old->rb_parent->rb_left = node; - else - old->rb_parent->rb_right = node; - } else - root->rb_node = node; - - old->rb_left->rb_parent = node; - if (old->rb_right) - old->rb_right->rb_parent = node; - goto color; - } - - parent = node->rb_parent; - color = node->rb_color; - - if (child) - child->rb_parent = parent; - if (parent) - { - if (parent->rb_left == node) - parent->rb_left = child; - else - parent->rb_right = child; - } - else - root->rb_node = child; - - color: - if (color == RB_BLACK) - __rb_erase_color(child, parent, root); -} -EXPORT_SYMBOL(rb_erase); - -/* - * This function returns the first node (in sort order) of the tree. - */ -rb_node_t *rb_get_first(rb_root_t *root) -{ - rb_node_t *n; - - n = root->rb_node; - if (!n) - return 0; - while (n->rb_left) - n = n->rb_left; - return n; -} -EXPORT_SYMBOL(rb_get_first); - -/* - * Given a node, this function will return the next node in the tree. - */ -rb_node_t *rb_get_next(rb_node_t *n) -{ - rb_node_t *parent; - - if (n->rb_right) { - n = n->rb_right; - while (n->rb_left) - n = n->rb_left; - return n; - } else { - while ((parent = n->rb_parent)) { - if (n == parent->rb_left) - return parent; - n = parent; - } - return 0; - } -} -EXPORT_SYMBOL(rb_get_next); - -- 1.8.3.1