Avoid using the rbtree if we don't have to
Basically reinstate the old logic of not sorting when it's
not a win for reading the data back.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
diff --git a/log.c b/log.c
index 0614b27..6c7c4d6 100644
--- a/log.c
+++ b/log.c
@@ -43,17 +43,34 @@
*/
void log_io_piece(struct thread_data *td, struct io_u *io_u)
{
- struct rb_node **p = &td->io_hist_tree.rb_node;
- struct rb_node *parent = NULL;
+ struct rb_node **p, *parent;
struct io_piece *ipo, *__ipo;
ipo = malloc(sizeof(struct io_piece));
- RB_CLEAR_NODE(&ipo->rb_node);
ipo->file = io_u->file;
ipo->offset = io_u->offset;
ipo->len = io_u->buflen;
/*
+ * We don't need to sort the entries, if:
+ *
+ * Sequential writes, or
+ * Random writes that lay out the file as it goes along
+ *
+ * For both these cases, just reading back data in the order we
+ * wrote it out is the fastest.
+ */
+ if (!td_random(td) || !td->o.overwrite) {
+ INIT_LIST_HEAD(&ipo->list);
+ list_add_tail(&ipo->list, &td->io_hist_list);
+ return;
+ }
+
+ RB_CLEAR_NODE(&ipo->rb_node);
+ p = &td->io_hist_tree.rb_node;
+ parent = NULL;
+
+ /*
* Sort the entry into the verification list
*/
while (*p) {