diff options
author | David Woodhouse <dwmw2@infradead.org> | 2006-04-21 08:15:17 -0400 |
---|---|---|
committer | David Woodhouse <dwmw2@infradead.org> | 2006-04-21 08:15:17 -0400 |
commit | 3db3a445308b3cee9bbbd8baa6d05081c9532da0 (patch) | |
tree | 768e3a190df58b0f5f5d4a5c5ade925649e757dd /block/cfq-iosched.c | |
parent | 7fe1e133bf45b0fe70491ed3d4c5b491feff7aa8 (diff) |
[RBTREE] Change rbtree off-tree marking in I/O schedulers.
They were abusing the rb_color field to mark nodes which weren't currently
on the tree. Fix that to use the same method as eventpoll did -- setting
the parent pointer to point back to itself. And use the appropriate
accessor macros for setting and reading the parent.
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Diffstat (limited to 'block/cfq-iosched.c')
-rw-r--r-- | block/cfq-iosched.c | 8 |
1 files changed, 1 insertions, 7 deletions
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index 2540dfaa3e38..01c416ba8437 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c | |||
@@ -60,14 +60,9 @@ static DEFINE_RWLOCK(cfq_exit_lock); | |||
60 | /* | 60 | /* |
61 | * rb-tree defines | 61 | * rb-tree defines |
62 | */ | 62 | */ |
63 | #define RB_NONE (2) | ||
64 | #define RB_EMPTY(node) ((node)->rb_node == NULL) | 63 | #define RB_EMPTY(node) ((node)->rb_node == NULL) |
65 | #define RB_CLEAR_COLOR(node) (node)->rb_color = RB_NONE | ||
66 | #define RB_CLEAR(node) do { \ | 64 | #define RB_CLEAR(node) do { \ |
67 | (node)->rb_parent = NULL; \ | 65 | memset(node, 0, sizeof(*node)); \ |
68 | RB_CLEAR_COLOR((node)); \ | ||
69 | (node)->rb_right = NULL; \ | ||
70 | (node)->rb_left = NULL; \ | ||
71 | } while (0) | 66 | } while (0) |
72 | #define RB_CLEAR_ROOT(root) ((root)->rb_node = NULL) | 67 | #define RB_CLEAR_ROOT(root) ((root)->rb_node = NULL) |
73 | #define rb_entry_crq(node) rb_entry((node), struct cfq_rq, rb_node) | 68 | #define rb_entry_crq(node) rb_entry((node), struct cfq_rq, rb_node) |
@@ -563,7 +558,6 @@ static inline void cfq_del_crq_rb(struct cfq_rq *crq) | |||
563 | cfq_update_next_crq(crq); | 558 | cfq_update_next_crq(crq); |
564 | 559 | ||
565 | rb_erase(&crq->rb_node, &cfqq->sort_list); | 560 | rb_erase(&crq->rb_node, &cfqq->sort_list); |
566 | RB_CLEAR_COLOR(&crq->rb_node); | ||
567 | 561 | ||
568 | if (cfq_cfqq_on_rr(cfqq) && RB_EMPTY(&cfqq->sort_list)) | 562 | if (cfq_cfqq_on_rr(cfqq) && RB_EMPTY(&cfqq->sort_list)) |
569 | cfq_del_cfqq_rr(cfqd, cfqq); | 563 | cfq_del_cfqq_rr(cfqd, cfqq); |