Re: [PATCH] btt: Fix overlapping IO stats.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Any chance this patch can be included in the next release?

Thanks,
Gwendal.

On Fri, Aug 18, 2017 at 3:00 PM, Gwendal Grignou <gwendal@xxxxxxxxxxxx> wrote:
> 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@xxxxxxxxxxxx>
> ---
>  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);
>         }
>  }
> --
> 2.14.1.480.gb18f417b89-goog
>
--
To unsubscribe from this list: send the line "unsubscribe linux-btrace" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Netdev]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux