aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan D. Brunelle <alan.brunelle@hp.com>2008-01-31 17:10:52 -0500
committerAlan D. Brunelle <alan.brunelle@hp.com>2008-01-31 17:10:52 -0500
commit00a47cd169f2cc87b5f63fe93226b7231dee678c (patch)
tree5968455af13fb7fce979685f3356c904579fc208
parent5683cbf679d2a03239f075661282bf4537a06130 (diff)
downloadblktrace-00a47cd169f2cc87b5f63fe93226b7231dee678c.tar.gz
UNPLUG does the timing stuff, UNPLUG TIMEOUT only does timeout
Each UNPLUG TIMEOUT should be followed by an UNPLUG, so we were getting double information on time outs.
-rw-r--r--btt/devs.c18
-rw-r--r--btt/globals.h3
-rw-r--r--btt/output.c2
-rw-r--r--btt/trace_plug.c14
4 files changed, 20 insertions, 17 deletions
diff --git a/btt/devs.c b/btt/devs.c
index 6a0fcfc..61dd427 100644
--- a/btt/devs.c
+++ b/btt/devs.c
@@ -264,15 +264,21 @@ void dip_plug(__u32 dev, double cur_time)
dip->last_plug = cur_time;
}
-void dip_unplug(__u32 dev, double cur_time, int is_timer)
+void dip_unplug(__u32 dev, double cur_time)
{
struct d_info *dip = __dip_find(dev);
- if (!dip || !dip->is_plugged) return;
+ if (dip && dip->is_plugged) {
+ dip->nplugs++;
+ dip->plugged_time += (cur_time - dip->last_plug);
+ dip->is_plugged = 0;
+ }
+}
- dip->nplugs++;
- if (is_timer) dip->n_timer_unplugs++;
+void dip_unplug_tm(__u32 dev)
+{
+ struct d_info *dip = __dip_find(dev);
- dip->plugged_time += (cur_time - dip->last_plug);
- dip->is_plugged = 0;
+ if (dip && dip->is_plugged)
+ dip->n_timer_unplugs++;
}
diff --git a/btt/globals.h b/btt/globals.h
index 4176fb4..163986b 100644
--- a/btt/globals.h
+++ b/btt/globals.h
@@ -247,7 +247,8 @@ void dip_foreach(struct io *iop, enum iop_type type,
struct io *dip_find_sec(struct d_info *dip, enum iop_type type, __u64 sec);
void dip_foreach_out(void (*func)(struct d_info *, void *), void *arg);
void dip_plug(__u32 dev, double cur_time);
-void dip_unplug(__u32 dev, double cur_time, int is_timer);
+void dip_unplug(__u32 dev, double cur_time);
+void dip_unplug_tm(__u32 dev);
void dip_exit(void);
/* dip_rb.c */
diff --git a/btt/output.c b/btt/output.c
index 33a9a73..fd22a9e 100644
--- a/btt/output.c
+++ b/btt/output.c
@@ -525,7 +525,7 @@ void __dip_output_plug(struct d_info *dip, void *arg)
double delta, pct;
if (dip->nplugs > 0) {
- if (dip->is_plugged) dip_unplug(dip->device, dip->end_time, 0);
+ if (dip->is_plugged) dip_unplug(dip->device, dip->end_time);
delta = dip->end_time - dip->start_time;
pct = 100.0 * ((dip->plugged_time / delta) / delta);
diff --git a/btt/trace_plug.c b/btt/trace_plug.c
index 06d9fc9..03076d7 100644
--- a/btt/trace_plug.c
+++ b/btt/trace_plug.c
@@ -20,21 +20,17 @@
*/
#include "globals.h"
-static inline void trace_unplug(struct io *u_iop, int is_timer)
+void trace_unplug_io(struct io *u_iop)
{
unplug_hist_add(u_iop);
- dip_unplug(u_iop->t.device, BIT_TIME(u_iop->t.time), is_timer);
+ dip_unplug(u_iop->t.device, BIT_TIME(u_iop->t.time));
io_release(u_iop);
}
-void trace_unplug_io(struct io *u_iop)
-{
- trace_unplug(u_iop, 0);
-}
-
-void trace_unplug_timer(struct io *u_iop)
+void trace_unplug_timer(struct io *ut_iop)
{
- trace_unplug(u_iop, 1);
+ dip_unplug_tm(ut_iop->t.device);
+ io_release(ut_iop);
}
void trace_plug(struct io *p_iop)