blktrace: backport upstream bugfix patches Signed-off-by: Zhiqiang Liu <liuzhiqiang26@huawei.com>
67 lines
1.8 KiB
Diff
67 lines
1.8 KiB
Diff
From 4ad65be104d69a100354897e0f04602b4a68461d Mon Sep 17 00:00:00 2001
|
|
From: Gwendal Grignou <gwendal@chromium.org>
|
|
Date: Fri, 18 Aug 2017 15:00:22 -0700
|
|
Subject: [PATCH 03/15] btt: Fix overlapping IO stats.
|
|
|
|
Keep scanning the tree for overlapping IO otherwise Q2G and process
|
|
traces will be incorrect.
|
|
|
|
Let assume we have 2 IOs:
|
|
|
|
A A+a
|
|
|---------------------------------------|
|
|
B B+b
|
|
|-----------------|
|
|
|
|
In the red/black tree we have:
|
|
|
|
o -> [A,A+a]
|
|
/ \
|
|
left right
|
|
/ \
|
|
[...]o o -> [B, B+b]
|
|
|
|
In the current code, if we would not be able to find [B+b] in the tree:
|
|
B is greater than A, so we won't go left
|
|
B+b is smaller than A+a, so we are not going right either.
|
|
|
|
When we have a [X, X+x] IO to look for:
|
|
We need to check for right when either:
|
|
X+x >= A+a (for merged IO)
|
|
and
|
|
X > A (for overlapping IO)
|
|
|
|
TEST=Check with a trace with overlapping IO: Q2C and Q2G are expected.
|
|
|
|
Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
|
|
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
|
---
|
|
btt/dip_rb.c | 4 ++--
|
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/btt/dip_rb.c b/btt/dip_rb.c
|
|
index 2aa7ffc..6efef6c 100644
|
|
--- a/btt/dip_rb.c
|
|
+++ b/btt/dip_rb.c
|
|
@@ -57,7 +57,7 @@ struct io *rb_find_sec(struct rb_root *root, __u64 sec)
|
|
__iop = rb_entry(n, struct io, rb_node);
|
|
if (sec < BIT_START(__iop))
|
|
n = n->rb_left;
|
|
- else if (sec >= BIT_END(__iop))
|
|
+ else if (sec > BIT_START(__iop))
|
|
n = n->rb_right;
|
|
else
|
|
return __iop;
|
|
@@ -82,7 +82,7 @@ void rb_foreach(struct rb_node *n, struct io *iop,
|
|
}
|
|
if (iop_s < this_s)
|
|
rb_foreach(n->rb_left, iop, fnc, head);
|
|
- if (this_e < iop_e)
|
|
+ if ((this_e < iop_e) || (this_s < iop_s))
|
|
rb_foreach(n->rb_right, iop, fnc, head);
|
|
}
|
|
}
|
|
--
|
|
1.8.3.1
|
|
|