btrfs: cleanup the unnecessary code in __tree_search() in ordered-data.c
PATCH 3/4 btrfs: cleanup the unnecessary code in __tree_search() in ordered-data.c
It is unnecessary to get the prev node by getting the next node first, because we can get the prev node directly by rb_prev(). And it is also unnecessary to use while loop to get the prev node.
This patch cleanups those unnecessary code in __tree_search() in ordered-data.c
--- fs/btrfs/ordered-data.c | 24 ++---------------------- 1 files changed, 2 insertions(+), 22 deletions(-)
fs/btrfs/ordered-data.c +2 -22
@@ -69,7 +69,6 @@ static struct rb_node *__tree_search(struct rb_root *root, u64 file_offset, {struct rb_node *n = root->rb_node;struct rb_node *prev =NULL ; -struct rb_node *test;struct btrfs_ordered_extent *entry;struct btrfs_ordered_extent *prev_entry =NULL ;
@@ -88,28 +87,9 @@ static struct rb_node *__tree_search(struct rb_root *root, u64 file_offset,if (!prev_ret)return NULL ; -while (prev && file_offset >=entry_end (prev_entry)) { - test =rb_next (prev); -if (!test) -break ; - prev_entry = rb_entry(test, struct btrfs_ordered_extent, - rb_node); -if (file_offset <entry_end (prev_entry)) -break ; +if (prev && file_offset < prev_entry->file_offset) + prev =rb_prev (prev); - prev = test; - } -if (prev) - prev_entry = rb_entry(prev, struct btrfs_ordered_extent, - rb_node); -while (prev && file_offset <entry_end (prev_entry)) { - test =rb_prev (prev); -if (!test) -break ; - prev_entry = rb_entry(test, struct btrfs_ordered_extent, - rb_node); - prev = test; - } *prev_ret = prev;return NULL ; }
Signature · 1 line
1.6.5.2
Quoted 5 lines · Miao Xie
It is unnecessary to get the prev node by getting the next node first, because we can get the prev node directly by
rb_prev(). And it is also unnecessary to use while loop to get the prev node.This patch cleanups those unnecessary code in
__tree_search()inordered-data.c
Thanks for taking the time to look through and review this code.
I'm afraid the searching code is much too confusing. The while loops were added because the function is supposed to return nodes adjacent to the range that was requested. After the initial walk down the rbtree, rb_prev doesn't always return the node you expect it to.
The while loops take care of that and return the nearest adjacent node.
[ full quote since it has been so long ]
-chris
Quoted 53 lines
Signed-off-by Miao Xie <[email protected]>--- fs/btrfs/ordered-data.c | 24 ++---------------------- 1 files changed, 2 insertions(+), 22 deletions(-)fs/btrfs/ordered-data.c +2
-22@@ -69,7 +69,6 @@ static struct rb_node *__tree_search(struct rb_root *root, u64 file_offset, {struct rb_node *n = root->rb_node;struct rb_node *prev =NULL ; -struct rb_node *test;struct btrfs_ordered_extent *entry;struct btrfs_ordered_extent *prev_entry =NULL ;@@ -88,28 +87,9 @@ static struct rb_node *__tree_search(struct rb_root *root, u64 file_offset,if (!prev_ret)return NULL ; -while (prev && file_offset >=entry_end (prev_entry)) { - test =rb_next (prev); -if (!test) -break ; - prev_entry = rb_entry(test, struct btrfs_ordered_extent, - rb_node); -if (file_offset <entry_end (prev_entry)) -break ; +if (prev && file_offset < prev_entry->file_offset) + prev =rb_prev (prev); - prev = test; - } -if (prev) - prev_entry = rb_entry(prev, struct btrfs_ordered_extent, - rb_node); -while (prev && file_offset <entry_end (prev_entry)) { - test =rb_prev (prev); -if (!test) -break ; - prev_entry = rb_entry(test, struct btrfs_ordered_extent, - rb_node); - prev = test; - } *prev_ret = prev;return NULL ; }Signature · 1 line
1.6.5.2