* [PATCH v2 0/7] blktrace: last round of fixes
@ 2009-03-27 5:39 Li Zefan
2009-03-27 5:39 ` [PATCH v2 1/7] trace: make 'mem' argument of trace_seq_putmem() const Li Zefan
` (8 more replies)
0 siblings, 9 replies; 16+ messages in thread
From: Li Zefan @ 2009-03-27 5:39 UTC (permalink / raw)
To: Ingo Molnar
Cc: Jens Axboe, Arnaldo Carvalho de Melo, Steven Rostedt,
Frederic Weisbecker, LKML
This is the last round of fixes for blktrace, I hope. :)
Changelog v1 -> v2:
- fix a bug in "blktrace: make classic output more classic",
and rebase other patches.
- re-order patches.
- a new patch for filtering BLK_TN_MESSAGE
[PATCH v2 1/6] trace: make 'mem' argument of trace_seq_putmem() const
[PATCH v2 2/6] blktrace: make classic output more classic
[PATCH v2 3/6] blktrace: fix blk_probes_ref chaos
[PATCH v2 4/6] blktrace: fix memory leak when freeing struct blk_io_trace
[PATCH v2 5/6] blktrace: extract duplidate code
[PATCH v2 6/6] blktrace: print out BLK_TN_MESSAGE properly
---
blktrace.c | 188 +++++++++++++++++++++++++++++++++------------------------
trace_output.c | 6 -
trace_output.h | 5 -
3 files changed, 117 insertions(+), 82 deletions(-)
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v2 1/7] trace: make 'mem' argument of trace_seq_putmem() const
2009-03-27 5:39 [PATCH v2 0/7] blktrace: last round of fixes Li Zefan
@ 2009-03-27 5:39 ` Li Zefan
2009-03-27 5:40 ` [PATCH v2 2/7] blktrace: make classic output more classic Li Zefan
` (7 subsequent siblings)
8 siblings, 0 replies; 16+ messages in thread
From: Li Zefan @ 2009-03-27 5:39 UTC (permalink / raw)
To: Ingo Molnar
Cc: Jens Axboe, Arnaldo Carvalho de Melo, Steven Rostedt,
Frederic Weisbecker, LKML
I passed a const value to trace_seq_putmem(), and I got compile warning.
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
---
kernel/trace/trace_output.c | 6 +++---
kernel/trace/trace_output.h | 5 +++--
2 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c
index 6595074..d72b9a6 100644
--- a/kernel/trace/trace_output.c
+++ b/kernel/trace/trace_output.c
@@ -137,7 +137,7 @@ int trace_seq_putc(struct trace_seq *s, unsigned char c)
return 1;
}
-int trace_seq_putmem(struct trace_seq *s, void *mem, size_t len)
+int trace_seq_putmem(struct trace_seq *s, const void *mem, size_t len)
{
if (len > ((PAGE_SIZE - 1) - s->len))
return 0;
@@ -148,10 +148,10 @@ int trace_seq_putmem(struct trace_seq *s, void *mem, size_t len)
return len;
}
-int trace_seq_putmem_hex(struct trace_seq *s, void *mem, size_t len)
+int trace_seq_putmem_hex(struct trace_seq *s, const void *mem, size_t len)
{
unsigned char hex[HEX_CHARS];
- unsigned char *data = mem;
+ const unsigned char *data = mem;
int i, j;
#ifdef __BIG_ENDIAN
diff --git a/kernel/trace/trace_output.h b/kernel/trace/trace_output.h
index 46fb961..e0bde39 100644
--- a/kernel/trace/trace_output.h
+++ b/kernel/trace/trace_output.h
@@ -31,8 +31,9 @@ extern ssize_t trace_seq_to_user(struct trace_seq *s, char __user *ubuf,
size_t cnt);
extern int trace_seq_puts(struct trace_seq *s, const char *str);
extern int trace_seq_putc(struct trace_seq *s, unsigned char c);
-extern int trace_seq_putmem(struct trace_seq *s, void *mem, size_t len);
-extern int trace_seq_putmem_hex(struct trace_seq *s, void *mem, size_t len);
+extern int trace_seq_putmem(struct trace_seq *s, const void *mem, size_t len);
+extern int trace_seq_putmem_hex(struct trace_seq *s, const void *mem,
+ size_t len);
extern void *trace_seq_reserve(struct trace_seq *s, size_t len);
extern int trace_seq_path(struct trace_seq *s, struct path *path);
extern int seq_print_userip_objs(const struct userstack_entry *entry,
--
1.5.4.rc3
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 2/7] blktrace: make classic output more classic
2009-03-27 5:39 [PATCH v2 0/7] blktrace: last round of fixes Li Zefan
2009-03-27 5:39 ` [PATCH v2 1/7] trace: make 'mem' argument of trace_seq_putmem() const Li Zefan
@ 2009-03-27 5:40 ` Li Zefan
2009-03-27 5:40 ` [PATCH v2 3/7] blktrace: fix blk_probes_ref chaos Li Zefan
` (6 subsequent siblings)
8 siblings, 0 replies; 16+ messages in thread
From: Li Zefan @ 2009-03-27 5:40 UTC (permalink / raw)
To: Ingo Molnar
Cc: Jens Axboe, Arnaldo Carvalho de Melo, Steven Rostedt,
Frederic Weisbecker, LKML
In the classic user-space blktrace, the output timestamp is sec.nsec
not sec.usec.
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
---
kernel/trace/blktrace.c | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
index d43cdac..5b28f0f 100644
--- a/kernel/trace/blktrace.c
+++ b/kernel/trace/blktrace.c
@@ -994,8 +994,8 @@ static void get_pdu_remap(const struct trace_entry *ent,
static int blk_log_action_iter(struct trace_iterator *iter, const char *act)
{
char rwbs[6];
- unsigned long long ts = ns2usecs(iter->ts);
- unsigned long usec_rem = do_div(ts, USEC_PER_SEC);
+ unsigned long long ts = iter->ts;
+ unsigned long nsec_rem = do_div(ts, NSEC_PER_SEC);
unsigned secs = (unsigned long)ts;
const struct trace_entry *ent = iter->ent;
const struct blk_io_trace *t = (const struct blk_io_trace *)ent;
@@ -1003,9 +1003,9 @@ static int blk_log_action_iter(struct trace_iterator *iter, const char *act)
fill_rwbs(rwbs, t);
return trace_seq_printf(&iter->seq,
- "%3d,%-3d %2d %5d.%06lu %5u %2s %3s ",
+ "%3d,%-3d %2d %5d.%09lu %5u %2s %3s ",
MAJOR(t->device), MINOR(t->device), iter->cpu,
- secs, usec_rem, ent->pid, act, rwbs);
+ secs, nsec_rem, ent->pid, act, rwbs);
}
static int blk_log_action_seq(struct trace_seq *s, const struct blk_io_trace *t,
--
1.5.4.rc3
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 3/7] blktrace: fix blk_probes_ref chaos
2009-03-27 5:39 [PATCH v2 0/7] blktrace: last round of fixes Li Zefan
2009-03-27 5:39 ` [PATCH v2 1/7] trace: make 'mem' argument of trace_seq_putmem() const Li Zefan
2009-03-27 5:40 ` [PATCH v2 2/7] blktrace: make classic output more classic Li Zefan
@ 2009-03-27 5:40 ` Li Zefan
2009-03-27 8:13 ` [PATCH v3 " Li Zefan
2009-03-27 5:40 ` [PATCH v2 4/7] blktrace: fix memory leak when freeing struct blk_io_trace Li Zefan
` (5 subsequent siblings)
8 siblings, 1 reply; 16+ messages in thread
From: Li Zefan @ 2009-03-27 5:40 UTC (permalink / raw)
To: Ingo Molnar
Cc: Jens Axboe, Arnaldo Carvalho de Melo, Steven Rostedt,
Frederic Weisbecker, LKML
ioctl-based blktrace allocates bt and registers tracepoints when
ioctl(BLKTRACESETUP), and do all cleanups when ioctl(BLKTRACETEARDOWN).
while ftrace-based blktrace allocates/frees bt when:
# echo 1/0 > /sys/block/sda/sda1/trace/enable
and registers/unregisters tracepoints when:
# echo blk/nop > /debugfs/tracing/current_tracer
or
# echo 1/0 > /debugfs/tracing/tracing_enable
The separatation of allocation and registeration causes 2 problems:
1. current user-space blktrace still calls ioctl(TEARDOWN) when
ioctl(SETUP) failed:
# echo 1 > /sys/block/sda/sda1/trace/enable
# blktrace /dev/sda
BLKTRACESETUP: Device or resource busy
^C
and now blk_probes_ref == -1
2. Another way to make blk_probes_ref == -1:
# plugin sdb && mount sdb1
# echo 1 > /sys/block/sdb/sdb1/trace/enable
# remove sdb
This patch does the allocation and registeration when writing
sdaX/trace/enable.
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
---
kernel/trace/blktrace.c | 15 +++++++--------
1 files changed, 7 insertions(+), 8 deletions(-)
diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
index 5b28f0f..8d6bd12 100644
--- a/kernel/trace/blktrace.c
+++ b/kernel/trace/blktrace.c
@@ -478,7 +478,7 @@ int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
goto err;
}
- if (atomic_add_return(1, &blk_probes_ref) == 1)
+ if (atomic_inc_return(&blk_probes_ref) == 1)
blk_register_tracepoints();
return 0;
@@ -1091,8 +1091,6 @@ static void blk_tracer_print_header(struct seq_file *m)
static void blk_tracer_start(struct trace_array *tr)
{
- if (atomic_add_return(1, &blk_probes_ref) == 1)
- blk_register_tracepoints();
trace_flags &= ~TRACE_ITER_CONTEXT_INFO;
}
@@ -1107,15 +1105,10 @@ static int blk_tracer_init(struct trace_array *tr)
static void blk_tracer_stop(struct trace_array *tr)
{
trace_flags |= TRACE_ITER_CONTEXT_INFO;
- if (atomic_dec_and_test(&blk_probes_ref))
- blk_unregister_tracepoints();
}
static void blk_tracer_reset(struct trace_array *tr)
{
- if (!atomic_read(&blk_probes_ref))
- return;
-
blk_tracer_enabled = false;
blk_tracer_stop(tr);
}
@@ -1254,6 +1247,9 @@ static int blk_trace_remove_queue(struct request_queue *q)
if (bt == NULL)
return -EINVAL;
+ if (atomic_dec_and_test(&blk_probes_ref))
+ blk_unregister_tracepoints();
+
kfree(bt);
return 0;
}
@@ -1280,6 +1276,9 @@ static int blk_trace_setup_queue(struct request_queue *q, dev_t dev)
return -EBUSY;
}
+ if (atomic_inc_return(&blk_probes_ref) == 1)
+ blk_register_tracepoints();
+
return 0;
}
--
1.5.4.rc3
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 4/7] blktrace: fix memory leak when freeing struct blk_io_trace
2009-03-27 5:39 [PATCH v2 0/7] blktrace: last round of fixes Li Zefan
` (2 preceding siblings ...)
2009-03-27 5:40 ` [PATCH v2 3/7] blktrace: fix blk_probes_ref chaos Li Zefan
@ 2009-03-27 5:40 ` Li Zefan
2009-03-27 8:13 ` [PATCH v3 " Li Zefan
2009-03-27 5:41 ` [PATCH v2 5/7] blktrace: extract duplidate code Li Zefan
` (4 subsequent siblings)
8 siblings, 1 reply; 16+ messages in thread
From: Li Zefan @ 2009-03-27 5:40 UTC (permalink / raw)
To: Ingo Molnar
Cc: Jens Axboe, Arnaldo Carvalho de Melo, Steven Rostedt,
Frederic Weisbecker, LKML
When mixing the use of ioctl-based blktrace and ftrace-based blktrace,
we can leak memory in this way:
# btrace /dev/sda > /dev/null &
# echo 0 > /sys/block/sda/sda1/trace/enable
now we leak bt->dropped_file, bt->msg_file, bt->rchan...
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
---
kernel/trace/blktrace.c | 29 ++++++++++++-----------------
1 files changed, 12 insertions(+), 17 deletions(-)
diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
index 8d6bd12..2f21d77 100644
--- a/kernel/trace/blktrace.c
+++ b/kernel/trace/blktrace.c
@@ -247,7 +247,7 @@ record_it:
static struct dentry *blk_tree_root;
static DEFINE_MUTEX(blk_tree_mutex);
-static void blk_trace_cleanup(struct blk_trace *bt)
+static void blk_trace_free(struct blk_trace *bt)
{
debugfs_remove(bt->msg_file);
debugfs_remove(bt->dropped_file);
@@ -255,6 +255,11 @@ static void blk_trace_cleanup(struct blk_trace *bt)
free_percpu(bt->sequence);
free_percpu(bt->msg_data);
kfree(bt);
+}
+
+static void blk_trace_cleanup(struct blk_trace *bt)
+{
+ blk_trace_free(bt);
if (atomic_dec_and_test(&blk_probes_ref))
blk_unregister_tracepoints();
}
@@ -410,11 +415,11 @@ int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
if (buts->name[i] == '/')
buts->name[i] = '_';
- ret = -ENOMEM;
bt = kzalloc(sizeof(*bt), GFP_KERNEL);
if (!bt)
- goto err;
+ return -ENOMEM;
+ ret = -ENOMEM;
bt->sequence = alloc_percpu(unsigned long);
if (!bt->sequence)
goto err;
@@ -483,17 +488,7 @@ int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
return 0;
err:
- if (bt) {
- if (bt->msg_file)
- debugfs_remove(bt->msg_file);
- if (bt->dropped_file)
- debugfs_remove(bt->dropped_file);
- free_percpu(bt->sequence);
- free_percpu(bt->msg_data);
- if (bt->rchan)
- relay_close(bt->rchan);
- kfree(bt);
- }
+ blk_trace_free(bt);
return ret;
}
@@ -1091,6 +1086,7 @@ static void blk_tracer_print_header(struct seq_file *m)
static void blk_tracer_start(struct trace_array *tr)
{
+ blk_tracer_enabled = true;
trace_flags &= ~TRACE_ITER_CONTEXT_INFO;
}
@@ -1098,18 +1094,17 @@ static int blk_tracer_init(struct trace_array *tr)
{
blk_tr = tr;
blk_tracer_start(tr);
- blk_tracer_enabled = true;
return 0;
}
static void blk_tracer_stop(struct trace_array *tr)
{
+ blk_tracer_enabled = false;
trace_flags |= TRACE_ITER_CONTEXT_INFO;
}
static void blk_tracer_reset(struct trace_array *tr)
{
- blk_tracer_enabled = false;
blk_tracer_stop(tr);
}
@@ -1250,7 +1245,7 @@ static int blk_trace_remove_queue(struct request_queue *q)
if (atomic_dec_and_test(&blk_probes_ref))
blk_unregister_tracepoints();
- kfree(bt);
+ blk_trace_free(bt);
return 0;
}
--
1.5.4.rc3
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 5/7] blktrace: extract duplidate code
2009-03-27 5:39 [PATCH v2 0/7] blktrace: last round of fixes Li Zefan
` (3 preceding siblings ...)
2009-03-27 5:40 ` [PATCH v2 4/7] blktrace: fix memory leak when freeing struct blk_io_trace Li Zefan
@ 2009-03-27 5:41 ` Li Zefan
2009-03-27 5:41 ` [PATCH v2 6/7] blktrace: print out BLK_TN_MESSAGE properly Li Zefan
` (3 subsequent siblings)
8 siblings, 0 replies; 16+ messages in thread
From: Li Zefan @ 2009-03-27 5:41 UTC (permalink / raw)
To: Ingo Molnar
Cc: Jens Axboe, Arnaldo Carvalho de Melo, Steven Rostedt,
Frederic Weisbecker, LKML
blk_trace_event_print() and blk_tracer_print_line() share most of the code.
text data bss dec hex filename
8605 393 12 9010 2332 kernel/trace/blktrace.o.orig
text data bss dec hex filename
8555 393 12 8960 2300 kernel/trace/blktrace.o
This patch also prepares for the next patch, that prints out BLK_TN_MESSAGE.
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
---
kernel/trace/blktrace.c | 62 ++++++++++++++++++++++------------------------
1 files changed, 30 insertions(+), 32 deletions(-)
diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
index 2f21d77..c103b0c 100644
--- a/kernel/trace/blktrace.c
+++ b/kernel/trace/blktrace.c
@@ -986,29 +986,31 @@ static void get_pdu_remap(const struct trace_entry *ent,
r->sector = be64_to_cpu(sector);
}
-static int blk_log_action_iter(struct trace_iterator *iter, const char *act)
+typedef int (blk_log_action_t) (struct trace_iterator *iter, const char *act);
+
+static int blk_log_action_classic(struct trace_iterator *iter, const char *act)
{
char rwbs[6];
unsigned long long ts = iter->ts;
unsigned long nsec_rem = do_div(ts, NSEC_PER_SEC);
unsigned secs = (unsigned long)ts;
- const struct trace_entry *ent = iter->ent;
- const struct blk_io_trace *t = (const struct blk_io_trace *)ent;
+ const struct blk_io_trace *t = te_blk_io_trace(iter->ent);
fill_rwbs(rwbs, t);
return trace_seq_printf(&iter->seq,
"%3d,%-3d %2d %5d.%09lu %5u %2s %3s ",
MAJOR(t->device), MINOR(t->device), iter->cpu,
- secs, nsec_rem, ent->pid, act, rwbs);
+ secs, nsec_rem, iter->ent->pid, act, rwbs);
}
-static int blk_log_action_seq(struct trace_seq *s, const struct blk_io_trace *t,
- const char *act)
+static int blk_log_action(struct trace_iterator *iter, const char *act)
{
char rwbs[6];
+ const struct blk_io_trace *t = te_blk_io_trace(iter->ent);
+
fill_rwbs(rwbs, t);
- return trace_seq_printf(s, "%3d,%-3d %2s %3s ",
+ return trace_seq_printf(&iter->seq, "%3d,%-3d %2s %3s ",
MAJOR(t->device), MINOR(t->device), act, rwbs);
}
@@ -1129,22 +1131,25 @@ static const struct {
[__BLK_TA_REMAP] = {{ "A", "remap" }, blk_log_remap },
};
-static enum print_line_t blk_trace_event_print(struct trace_iterator *iter,
- int flags)
+static enum print_line_t print_one_line(struct trace_iterator *iter,
+ bool classic)
{
struct trace_seq *s = &iter->seq;
- const struct blk_io_trace *t = (struct blk_io_trace *)iter->ent;
- const u16 what = t->action & ((1 << BLK_TC_SHIFT) - 1);
+ const struct blk_io_trace *t;
+ u16 what;
int ret;
+ bool long_act;
+ blk_log_action_t *log_action;
- if (!trace_print_context(iter))
- return TRACE_TYPE_PARTIAL_LINE;
+ t = te_blk_io_trace(iter->ent);
+ what = t->action & ((1 << BLK_TC_SHIFT) - 1);
+ long_act = !!(trace_flags & TRACE_ITER_VERBOSE);
+ log_action = classic ? &blk_log_action_classic : &blk_log_action;
if (unlikely(what == 0 || what >= ARRAY_SIZE(what2act)))
ret = trace_seq_printf(s, "Bad pc action %x\n", what);
else {
- const bool long_act = !!(trace_flags & TRACE_ITER_VERBOSE);
- ret = blk_log_action_seq(s, t, what2act[what].act[long_act]);
+ ret = log_action(iter, what2act[what].act[long_act]);
if (ret)
ret = what2act[what].print(s, iter->ent);
}
@@ -1152,6 +1157,15 @@ static enum print_line_t blk_trace_event_print(struct trace_iterator *iter,
return ret ? TRACE_TYPE_HANDLED : TRACE_TYPE_PARTIAL_LINE;
}
+static enum print_line_t blk_trace_event_print(struct trace_iterator *iter,
+ int flags)
+{
+ if (!trace_print_context(iter))
+ return TRACE_TYPE_PARTIAL_LINE;
+
+ return print_one_line(iter, false);
+}
+
static int blk_trace_synthesize_old_trace(struct trace_iterator *iter)
{
struct trace_seq *s = &iter->seq;
@@ -1177,26 +1191,10 @@ blk_trace_event_print_binary(struct trace_iterator *iter, int flags)
static enum print_line_t blk_tracer_print_line(struct trace_iterator *iter)
{
- const struct blk_io_trace *t;
- u16 what;
- int ret;
-
if (!(blk_tracer_flags.val & TRACE_BLK_OPT_CLASSIC))
return TRACE_TYPE_UNHANDLED;
- t = (const struct blk_io_trace *)iter->ent;
- what = t->action & ((1 << BLK_TC_SHIFT) - 1);
-
- if (unlikely(what == 0 || what >= ARRAY_SIZE(what2act)))
- ret = trace_seq_printf(&iter->seq, "Bad pc action %x\n", what);
- else {
- const bool long_act = !!(trace_flags & TRACE_ITER_VERBOSE);
- ret = blk_log_action_iter(iter, what2act[what].act[long_act]);
- if (ret)
- ret = what2act[what].print(&iter->seq, iter->ent);
- }
-
- return ret ? TRACE_TYPE_HANDLED : TRACE_TYPE_PARTIAL_LINE;
+ return print_one_line(iter, true);
}
static struct tracer blk_tracer __read_mostly = {
--
1.5.4.rc3
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 6/7] blktrace: print out BLK_TN_MESSAGE properly
2009-03-27 5:39 [PATCH v2 0/7] blktrace: last round of fixes Li Zefan
` (4 preceding siblings ...)
2009-03-27 5:41 ` [PATCH v2 5/7] blktrace: extract duplidate code Li Zefan
@ 2009-03-27 5:41 ` Li Zefan
2009-03-27 5:42 ` [PATCH v2 7/7] blktrace: support filtering of BLK_TN_MESSAGE Li Zefan
` (2 subsequent siblings)
8 siblings, 0 replies; 16+ messages in thread
From: Li Zefan @ 2009-03-27 5:41 UTC (permalink / raw)
To: Ingo Molnar
Cc: Jens Axboe, Arnaldo Carvalho de Melo, Steven Rostedt,
Frederic Weisbecker, LKML
Before this patch:
# cat trace
make-5383 [001] 741.240059: 8,7 P N [make]
__trace_note_message: cfq1074
# echo 1 > options/blk_classic
# cat trace
8,7 1 0.692221252 0 C W 130411392 + 1024 [0]
Bad pc action 6361
Bad pc action 283d
# echo 0 > options/blk_classic
# echo bin > trace_options
# cat trace_pipe | blkparse -i -
(can't parse messages generated by blk_add_trace_msg())
After this patch:
# cat trace
<idle>-0 [001] 187.600933: 8,7 C W 145220224 + 8 [0]
<idle>-0 [001] 187.600946: 8,7 m N cfq1076 complete
# echo 1 > options/blk_classic
# cat trace
8,7 1 0.256378996 238 I W 113190728 + 8 [pdflush]
8,7 1 0.256378998 238 m N cfq1076 insert_request
# echo 0 > options/blk_classic
# echo bin > trace_options
# cat trace_pipe | blkparse -i -
8,7 1 0 22.973250293 0 C W 102770576 + 8 [0]
8,7 1 0 22.973259213 0 m N cfq1076 complete
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
---
kernel/trace/blktrace.c | 80 +++++++++++++++++++++++++++++++++++-----------
1 files changed, 61 insertions(+), 19 deletions(-)
diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
index c103b0c..947c5b3 100644
--- a/kernel/trace/blktrace.c
+++ b/kernel/trace/blktrace.c
@@ -59,22 +59,39 @@ static void trace_note(struct blk_trace *bt, pid_t pid, int action,
const void *data, size_t len)
{
struct blk_io_trace *t;
+ struct ring_buffer_event *event = NULL;
+ int pc = 0;
+ int cpu = smp_processor_id();
+ bool blk_tracer = blk_tracer_enabled;
+
+ if (blk_tracer) {
+ pc = preempt_count();
+ event = trace_buffer_lock_reserve(blk_tr, TRACE_BLK,
+ sizeof(*t) + len,
+ 0, pc);
+ if (!event)
+ return;
+ t = ring_buffer_event_data(event);
+ goto record_it;
+ }
if (!bt->rchan)
return;
t = relay_reserve(bt->rchan, sizeof(*t) + len);
if (t) {
- const int cpu = smp_processor_id();
-
t->magic = BLK_IO_TRACE_MAGIC | BLK_IO_TRACE_VERSION;
t->time = ktime_to_ns(ktime_get());
+record_it:
t->device = bt->dev;
t->action = action;
t->pid = pid;
t->cpu = cpu;
t->pdu_len = len;
memcpy((void *) t + sizeof(*t), data, len);
+
+ if (blk_tracer)
+ trace_buffer_unlock_commit(blk_tr, event, 0, pc);
}
}
@@ -110,14 +127,8 @@ void __trace_note_message(struct blk_trace *bt, const char *fmt, ...)
unsigned long flags;
char *buf;
- if (blk_tracer_enabled) {
- va_start(args, fmt);
- ftrace_vprintk(fmt, args);
- va_end(args);
- return;
- }
-
- if (!bt->msg_data)
+ if (unlikely(bt->trace_state != Blktrace_running &&
+ !blk_tracer_enabled))
return;
local_irq_save(flags);
@@ -168,9 +179,9 @@ static void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes,
unsigned long *sequence;
pid_t pid;
int cpu, pc = 0;
+ bool blk_tracer = blk_tracer_enabled;
- if (unlikely(bt->trace_state != Blktrace_running &&
- !blk_tracer_enabled))
+ if (unlikely(bt->trace_state != Blktrace_running && !blk_tracer))
return;
what |= ddir_act[rw & WRITE];
@@ -185,7 +196,7 @@ static void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes,
return;
cpu = raw_smp_processor_id();
- if (blk_tracer_enabled) {
+ if (blk_tracer) {
tracing_record_cmdline(current);
pc = preempt_count();
@@ -235,7 +246,7 @@ record_it:
if (pdu_len)
memcpy((void *) t + sizeof(*t), pdu_data, pdu_len);
- if (blk_tracer_enabled) {
+ if (blk_tracer) {
trace_buffer_unlock_commit(blk_tr, event, 0, pc);
return;
}
@@ -922,6 +933,11 @@ static void fill_rwbs(char *rwbs, const struct blk_io_trace *t)
int i = 0;
int tc = t->action >> BLK_TC_SHIFT;
+ if (t->action == BLK_TN_MESSAGE) {
+ rwbs[i++] = 'N';
+ goto out;
+ }
+
if (tc & BLK_TC_DISCARD)
rwbs[i++] = 'D';
else if (tc & BLK_TC_WRITE)
@@ -939,7 +955,7 @@ static void fill_rwbs(char *rwbs, const struct blk_io_trace *t)
rwbs[i++] = 'S';
if (tc & BLK_TC_META)
rwbs[i++] = 'M';
-
+out:
rwbs[i] = '\0';
}
@@ -1074,6 +1090,17 @@ static int blk_log_split(struct trace_seq *s, const struct trace_entry *ent)
get_pdu_int(ent), cmd);
}
+static int blk_log_msg(struct trace_seq *s, const struct trace_entry *ent)
+{
+ int ret;
+ const struct blk_io_trace *t = te_blk_io_trace(ent);
+
+ ret = trace_seq_putmem(s, t + 1, t->pdu_len);
+ if (ret)
+ return trace_seq_putc(s, '\n');
+ return ret;
+}
+
/*
* struct tracer operations
*/
@@ -1146,6 +1173,13 @@ static enum print_line_t print_one_line(struct trace_iterator *iter,
long_act = !!(trace_flags & TRACE_ITER_VERBOSE);
log_action = classic ? &blk_log_action_classic : &blk_log_action;
+ if (t->action == BLK_TN_MESSAGE) {
+ ret = log_action(iter, long_act ? "message" : "m");
+ if (ret)
+ ret = blk_log_msg(s, iter->ent);
+ goto out;
+ }
+
if (unlikely(what == 0 || what >= ARRAY_SIZE(what2act)))
ret = trace_seq_printf(s, "Bad pc action %x\n", what);
else {
@@ -1153,7 +1187,7 @@ static enum print_line_t print_one_line(struct trace_iterator *iter,
if (ret)
ret = what2act[what].print(s, iter->ent);
}
-
+out:
return ret ? TRACE_TYPE_HANDLED : TRACE_TYPE_PARTIAL_LINE;
}
@@ -1253,11 +1287,16 @@ static int blk_trace_remove_queue(struct request_queue *q)
static int blk_trace_setup_queue(struct request_queue *q, dev_t dev)
{
struct blk_trace *old_bt, *bt = NULL;
+ int ret = -ENOMEM;
bt = kzalloc(sizeof(*bt), GFP_KERNEL);
if (!bt)
return -ENOMEM;
+ bt->msg_data = __alloc_percpu(BLK_TN_MAX_MSG, __alignof__(char));
+ if (!bt->msg_data)
+ goto free_bt;
+
bt->dev = dev;
bt->act_mask = (u16)-1;
bt->end_lba = -1ULL;
@@ -1265,14 +1304,17 @@ static int blk_trace_setup_queue(struct request_queue *q, dev_t dev)
old_bt = xchg(&q->blk_trace, bt);
if (old_bt != NULL) {
(void)xchg(&q->blk_trace, old_bt);
- kfree(bt);
- return -EBUSY;
+ ret = -EBUSY;
+ goto free_bt;
}
if (atomic_inc_return(&blk_probes_ref) == 1)
blk_register_tracepoints();
-
return 0;
+
+free_bt:
+ blk_trace_free(bt);
+ return ret;
}
/*
--
1.5.4.rc3
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 7/7] blktrace: support filtering of BLK_TN_MESSAGE
2009-03-27 5:39 [PATCH v2 0/7] blktrace: last round of fixes Li Zefan
` (5 preceding siblings ...)
2009-03-27 5:41 ` [PATCH v2 6/7] blktrace: print out BLK_TN_MESSAGE properly Li Zefan
@ 2009-03-27 5:42 ` Li Zefan
2009-03-27 9:42 ` [PATCH v2 0/7] blktrace: last round of fixes Ingo Molnar
2009-03-28 22:46 ` Ingo Molnar
8 siblings, 0 replies; 16+ messages in thread
From: Li Zefan @ 2009-03-27 5:42 UTC (permalink / raw)
To: Ingo Molnar
Cc: Jens Axboe, Arnaldo Carvalho de Melo, Steven Rostedt,
Frederic Weisbecker, LKML
I found large bunk of the output of blktrace are BLK_TN_MESSAGE events:
% blktrace -d /dev/sda -o - | blkparse -i - -o ~/blk.log
(after some seconds)
% cat ~/blk.log | wc -l
69041
% cat ~/blk.log | grep "m N" | wc -l
38232
It will be useful to be able to filter those events.
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
---
kernel/trace/blktrace.c | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
index 947c5b3..dcabe59 100644
--- a/kernel/trace/blktrace.c
+++ b/kernel/trace/blktrace.c
@@ -131,6 +131,9 @@ void __trace_note_message(struct blk_trace *bt, const char *fmt, ...)
!blk_tracer_enabled))
return;
+ if (!(bt->act_mask & BLK_TC_NOTIFY))
+ return;
+
local_irq_save(flags);
buf = per_cpu_ptr(bt->msg_data, smp_processor_id());
va_start(args, fmt);
@@ -1366,6 +1369,7 @@ static const struct {
{ BLK_TC_COMPLETE, "complete" },
{ BLK_TC_FS, "fs" },
{ BLK_TC_PC, "pc" },
+ { BLK_TC_NOTIFY, "notify" },
{ BLK_TC_AHEAD, "ahead" },
{ BLK_TC_META, "meta" },
{ BLK_TC_DISCARD, "discard" },
--
1.5.4.rc3
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v3 3/7] blktrace: fix blk_probes_ref chaos
2009-03-27 5:40 ` [PATCH v2 3/7] blktrace: fix blk_probes_ref chaos Li Zefan
@ 2009-03-27 8:13 ` Li Zefan
0 siblings, 0 replies; 16+ messages in thread
From: Li Zefan @ 2009-03-27 8:13 UTC (permalink / raw)
To: Ingo Molnar
Cc: Jens Axboe, Arnaldo Carvalho de Melo, Steven Rostedt,
Frederic Weisbecker, LKML
Some changes that should have been in this patch, went into [PATCH 4/7]..
Something went wrong when I made those patches.. :(
========
ioctl-based blktrace allocates bt and registers tracepoints when
ioctl(BLKTRACESETUP), and do all cleanups when ioctl(BLKTRACETEARDOWN).
while ftrace-based blktrace allocates/frees bt when:
# echo 1/0 > /sys/block/sda/sda1/trace/enable
and registers/unregisters tracepoints when:
# echo blk/nop > /debugfs/tracing/current_tracer
or
# echo 1/0 > /debugfs/tracing/tracing_enable
The separatation of allocation and registeration causes 2 problems:
1. current user-space blktrace still calls ioctl(TEARDOWN) when
ioctl(SETUP) failed:
# echo 1 > /sys/block/sda/sda1/trace/enable
# blktrace /dev/sda
BLKTRACESETUP: Device or resource busy
^C
and now blk_probes_ref == -1
2. Another way to make blk_probes_ref == -1:
# plugin sdb && mount sdb1
# echo 1 > /sys/block/sdb/sdb1/trace/enable
# remove sdb
This patch does the allocation and registeration when writing
sdaX/trace/enable.
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
---
kernel/trace/blktrace.c | 19 +++++++++----------
1 files changed, 9 insertions(+), 10 deletions(-)
diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
index 5b28f0f..acf8454 100644
--- a/kernel/trace/blktrace.c
+++ b/kernel/trace/blktrace.c
@@ -478,7 +478,7 @@ int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
goto err;
}
- if (atomic_add_return(1, &blk_probes_ref) == 1)
+ if (atomic_inc_return(&blk_probes_ref) == 1)
blk_register_tracepoints();
return 0;
@@ -1091,8 +1091,7 @@ static void blk_tracer_print_header(struct seq_file *m)
static void blk_tracer_start(struct trace_array *tr)
{
- if (atomic_add_return(1, &blk_probes_ref) == 1)
- blk_register_tracepoints();
+ blk_tracer_enabled = true;
trace_flags &= ~TRACE_ITER_CONTEXT_INFO;
}
@@ -1100,23 +1099,17 @@ static int blk_tracer_init(struct trace_array *tr)
{
blk_tr = tr;
blk_tracer_start(tr);
- blk_tracer_enabled = true;
return 0;
}
static void blk_tracer_stop(struct trace_array *tr)
{
+ blk_tracer_enabled = false;
trace_flags |= TRACE_ITER_CONTEXT_INFO;
- if (atomic_dec_and_test(&blk_probes_ref))
- blk_unregister_tracepoints();
}
static void blk_tracer_reset(struct trace_array *tr)
{
- if (!atomic_read(&blk_probes_ref))
- return;
-
- blk_tracer_enabled = false;
blk_tracer_stop(tr);
}
@@ -1254,6 +1247,9 @@ static int blk_trace_remove_queue(struct request_queue *q)
if (bt == NULL)
return -EINVAL;
+ if (atomic_dec_and_test(&blk_probes_ref))
+ blk_unregister_tracepoints();
+
kfree(bt);
return 0;
}
@@ -1280,6 +1276,9 @@ static int blk_trace_setup_queue(struct request_queue *q, dev_t dev)
return -EBUSY;
}
+ if (atomic_inc_return(&blk_probes_ref) == 1)
+ blk_register_tracepoints();
+
return 0;
}
--
1.5.4.rc3
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v3 4/7] blktrace: fix memory leak when freeing struct blk_io_trace
2009-03-27 5:40 ` [PATCH v2 4/7] blktrace: fix memory leak when freeing struct blk_io_trace Li Zefan
@ 2009-03-27 8:13 ` Li Zefan
0 siblings, 0 replies; 16+ messages in thread
From: Li Zefan @ 2009-03-27 8:13 UTC (permalink / raw)
To: Ingo Molnar
Cc: Jens Axboe, Arnaldo Carvalho de Melo, Steven Rostedt,
Frederic Weisbecker, LKML
> static void blk_tracer_start(struct trace_array *tr)
> {
> + blk_tracer_enabled = true;
> trace_flags &= ~TRACE_ITER_CONTEXT_INFO;
> }
...
> static void blk_tracer_reset(struct trace_array *tr)
> {
> - blk_tracer_enabled = false;
> blk_tracer_stop(tr);
> }
Those changes should have been in [PATCH 3/7]..
==========
[PATCH] blktrace: fix memory leak when freeing struct blk_io_trace
When mixing the use of ioctl-based blktrace and ftrace-based blktrace,
we can leak memory in this way:
# btrace /dev/sda > /dev/null &
# echo 0 > /sys/block/sda/sda1/trace/enable
now we leak bt->dropped_file, bt->msg_file, bt->rchan...
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
---
kernel/trace/blktrace.c | 25 ++++++++++---------------
1 files changed, 10 insertions(+), 15 deletions(-)
diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
index acf8454..2f21d77 100644
--- a/kernel/trace/blktrace.c
+++ b/kernel/trace/blktrace.c
@@ -247,7 +247,7 @@ record_it:
static struct dentry *blk_tree_root;
static DEFINE_MUTEX(blk_tree_mutex);
-static void blk_trace_cleanup(struct blk_trace *bt)
+static void blk_trace_free(struct blk_trace *bt)
{
debugfs_remove(bt->msg_file);
debugfs_remove(bt->dropped_file);
@@ -255,6 +255,11 @@ static void blk_trace_cleanup(struct blk_trace *bt)
free_percpu(bt->sequence);
free_percpu(bt->msg_data);
kfree(bt);
+}
+
+static void blk_trace_cleanup(struct blk_trace *bt)
+{
+ blk_trace_free(bt);
if (atomic_dec_and_test(&blk_probes_ref))
blk_unregister_tracepoints();
}
@@ -410,11 +415,11 @@ int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
if (buts->name[i] == '/')
buts->name[i] = '_';
- ret = -ENOMEM;
bt = kzalloc(sizeof(*bt), GFP_KERNEL);
if (!bt)
- goto err;
+ return -ENOMEM;
+ ret = -ENOMEM;
bt->sequence = alloc_percpu(unsigned long);
if (!bt->sequence)
goto err;
@@ -483,17 +488,7 @@ int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
return 0;
err:
- if (bt) {
- if (bt->msg_file)
- debugfs_remove(bt->msg_file);
- if (bt->dropped_file)
- debugfs_remove(bt->dropped_file);
- free_percpu(bt->sequence);
- free_percpu(bt->msg_data);
- if (bt->rchan)
- relay_close(bt->rchan);
- kfree(bt);
- }
+ blk_trace_free(bt);
return ret;
}
@@ -1250,7 +1245,7 @@ static int blk_trace_remove_queue(struct request_queue *q)
if (atomic_dec_and_test(&blk_probes_ref))
blk_unregister_tracepoints();
- kfree(bt);
+ blk_trace_free(bt);
return 0;
}
--
1.5.4.rc3
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH v2 0/7] blktrace: last round of fixes
2009-03-27 5:39 [PATCH v2 0/7] blktrace: last round of fixes Li Zefan
` (6 preceding siblings ...)
2009-03-27 5:42 ` [PATCH v2 7/7] blktrace: support filtering of BLK_TN_MESSAGE Li Zefan
@ 2009-03-27 9:42 ` Ingo Molnar
2009-03-28 22:46 ` Ingo Molnar
8 siblings, 0 replies; 16+ messages in thread
From: Ingo Molnar @ 2009-03-27 9:42 UTC (permalink / raw)
To: Li Zefan
Cc: Jens Axboe, Arnaldo Carvalho de Melo, Steven Rostedt,
Frederic Weisbecker, LKML
* Li Zefan <lizf@cn.fujitsu.com> wrote:
> This is the last round of fixes for blktrace, I hope. :)
>
> Changelog v1 -> v2:
> - fix a bug in "blktrace: make classic output more classic",
> and rebase other patches.
> - re-order patches.
> - a new patch for filtering BLK_TN_MESSAGE
>
>
> [PATCH v2 1/6] trace: make 'mem' argument of trace_seq_putmem() const
> [PATCH v2 2/6] blktrace: make classic output more classic
> [PATCH v2 3/6] blktrace: fix blk_probes_ref chaos
> [PATCH v2 4/6] blktrace: fix memory leak when freeing struct blk_io_trace
> [PATCH v2 5/6] blktrace: extract duplidate code
> [PATCH v2 6/6] blktrace: print out BLK_TN_MESSAGE properly
thanks Li!
I think we can do the following ordering. First apply the fixes:
> [PATCH v2 1/6] trace: make 'mem' argument of trace_seq_putmem() const
> [PATCH v2 3/6] blktrace: fix blk_probes_ref chaos
> [PATCH v2 4/6] blktrace: fix memory leak when freeing struct blk_io_trace
These mostly relate to mixed use of ioctl and ftrace based block
tracing - which is rare but indeed possible. The fixes and cleanups
you did to refcounting look good.
These bits:
> [PATCH v2 2/6] blktrace: make classic output more classic
> [PATCH v2 5/6] blktrace: extract duplidate code
> [PATCH v2 6/6] blktrace: print out BLK_TN_MESSAGE properly
are optional improvements. The BLK_TN_MESSAGE filter addition -
Jens, are you fine with that feature addition? (it certainly looks
like a nice thing to me.)
Also, note that we'll get even more in-kernel filtering capabilities
in blktrace if we convert the tracepoints to TRACE_EVENT().
Reviewed-by: Ingo Molnar <mingo@elte.hu>
Ingo
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 0/7] blktrace: last round of fixes
2009-03-27 5:39 [PATCH v2 0/7] blktrace: last round of fixes Li Zefan
` (7 preceding siblings ...)
2009-03-27 9:42 ` [PATCH v2 0/7] blktrace: last round of fixes Ingo Molnar
@ 2009-03-28 22:46 ` Ingo Molnar
2009-03-29 18:02 ` Jens Axboe
2009-03-30 0:40 ` Li Zefan
8 siblings, 2 replies; 16+ messages in thread
From: Ingo Molnar @ 2009-03-28 22:46 UTC (permalink / raw)
To: Li Zefan
Cc: Jens Axboe, Arnaldo Carvalho de Melo, Steven Rostedt,
Frederic Weisbecker, LKML
* Li Zefan <lizf@cn.fujitsu.com> wrote:
> This is the last round of fixes for blktrace, I hope. :)
>
> Changelog v1 -> v2:
> - fix a bug in "blktrace: make classic output more classic",
> and rebase other patches.
> - re-order patches.
> - a new patch for filtering BLK_TN_MESSAGE
>
> [PATCH v2 1/6] trace: make 'mem' argument of trace_seq_putmem() const
> [PATCH v2 2/6] blktrace: make classic output more classic
> [PATCH v2 3/6] blktrace: fix blk_probes_ref chaos
> [PATCH v2 4/6] blktrace: fix memory leak when freeing struct blk_io_trace
> [PATCH v2 5/6] blktrace: extract duplidate code
> [PATCH v2 6/6] blktrace: print out BLK_TN_MESSAGE properly
> ---
> blktrace.c | 188 +++++++++++++++++++++++++++++++++------------------------
> trace_output.c | 6 -
> trace_output.h | 5 -
> 3 files changed, 117 insertions(+), 82 deletions(-)
Li, Jens - what's your call for v2.6.30, can the blktrace changes go
upstream or should i zap the whole thing?
There are no new -tip test failures here so it's green as far as i'm
concerned. It's holding up the tracing tree so we need to decide one
way or another.
Thanks,
Ingo
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 0/7] blktrace: last round of fixes
2009-03-28 22:46 ` Ingo Molnar
@ 2009-03-29 18:02 ` Jens Axboe
2009-03-30 1:17 ` Ingo Molnar
2009-03-30 0:40 ` Li Zefan
1 sibling, 1 reply; 16+ messages in thread
From: Jens Axboe @ 2009-03-29 18:02 UTC (permalink / raw)
To: Ingo Molnar
Cc: Li Zefan, Arnaldo Carvalho de Melo, Steven Rostedt,
Frederic Weisbecker, LKML
On Sat, Mar 28 2009, Ingo Molnar wrote:
>
> * Li Zefan <lizf@cn.fujitsu.com> wrote:
>
> > This is the last round of fixes for blktrace, I hope. :)
> >
> > Changelog v1 -> v2:
> > - fix a bug in "blktrace: make classic output more classic",
> > and rebase other patches.
> > - re-order patches.
> > - a new patch for filtering BLK_TN_MESSAGE
> >
> > [PATCH v2 1/6] trace: make 'mem' argument of trace_seq_putmem() const
> > [PATCH v2 2/6] blktrace: make classic output more classic
> > [PATCH v2 3/6] blktrace: fix blk_probes_ref chaos
> > [PATCH v2 4/6] blktrace: fix memory leak when freeing struct blk_io_trace
> > [PATCH v2 5/6] blktrace: extract duplidate code
> > [PATCH v2 6/6] blktrace: print out BLK_TN_MESSAGE properly
> > ---
> > blktrace.c | 188 +++++++++++++++++++++++++++++++++------------------------
> > trace_output.c | 6 -
> > trace_output.h | 5 -
> > 3 files changed, 117 insertions(+), 82 deletions(-)
>
> Li, Jens - what's your call for v2.6.30, can the blktrace changes go
> upstream or should i zap the whole thing?
>
> There are no new -tip test failures here so it's green as far as i'm
> concerned. It's holding up the tracing tree so we need to decide one
> way or another.
If Li deems it ready, then it has my blessing as well.
--
Jens Axboe
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 0/7] blktrace: last round of fixes
2009-03-28 22:46 ` Ingo Molnar
2009-03-29 18:02 ` Jens Axboe
@ 2009-03-30 0:40 ` Li Zefan
2009-03-30 1:23 ` Ingo Molnar
1 sibling, 1 reply; 16+ messages in thread
From: Li Zefan @ 2009-03-30 0:40 UTC (permalink / raw)
To: Ingo Molnar
Cc: Jens Axboe, Arnaldo Carvalho de Melo, Steven Rostedt,
Frederic Weisbecker, LKML
Ingo Molnar wrote:
> * Li Zefan <lizf@cn.fujitsu.com> wrote:
>
>> This is the last round of fixes for blktrace, I hope. :)
>>
>> Changelog v1 -> v2:
>> - fix a bug in "blktrace: make classic output more classic",
>> and rebase other patches.
>> - re-order patches.
>> - a new patch for filtering BLK_TN_MESSAGE
>>
>> [PATCH v2 1/6] trace: make 'mem' argument of trace_seq_putmem() const
>> [PATCH v2 2/6] blktrace: make classic output more classic
>> [PATCH v2 3/6] blktrace: fix blk_probes_ref chaos
>> [PATCH v2 4/6] blktrace: fix memory leak when freeing struct blk_io_trace
>> [PATCH v2 5/6] blktrace: extract duplidate code
>> [PATCH v2 6/6] blktrace: print out BLK_TN_MESSAGE properly
>> ---
>> blktrace.c | 188 +++++++++++++++++++++++++++++++++------------------------
>> trace_output.c | 6 -
>> trace_output.h | 5 -
>> 3 files changed, 117 insertions(+), 82 deletions(-)
>
> Li, Jens - what's your call for v2.6.30, can the blktrace changes go
> upstream or should i zap the whole thing?
>
It should be find to merge tip/blktrace into .30, and we still have 2
month to fix remaining bugs, if any.
> There are no new -tip test failures here so it's green as far as i'm
> concerned. It's holding up the tracing tree so we need to decide one
> way or another.
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 0/7] blktrace: last round of fixes
2009-03-29 18:02 ` Jens Axboe
@ 2009-03-30 1:17 ` Ingo Molnar
0 siblings, 0 replies; 16+ messages in thread
From: Ingo Molnar @ 2009-03-30 1:17 UTC (permalink / raw)
To: Jens Axboe
Cc: Li Zefan, Arnaldo Carvalho de Melo, Steven Rostedt,
Frederic Weisbecker, LKML
* Jens Axboe <jens.axboe@oracle.com> wrote:
> On Sat, Mar 28 2009, Ingo Molnar wrote:
> >
> > * Li Zefan <lizf@cn.fujitsu.com> wrote:
> >
> > > This is the last round of fixes for blktrace, I hope. :)
> > >
> > > Changelog v1 -> v2:
> > > - fix a bug in "blktrace: make classic output more classic",
> > > and rebase other patches.
> > > - re-order patches.
> > > - a new patch for filtering BLK_TN_MESSAGE
> > >
> > > [PATCH v2 1/6] trace: make 'mem' argument of trace_seq_putmem() const
> > > [PATCH v2 2/6] blktrace: make classic output more classic
> > > [PATCH v2 3/6] blktrace: fix blk_probes_ref chaos
> > > [PATCH v2 4/6] blktrace: fix memory leak when freeing struct blk_io_trace
> > > [PATCH v2 5/6] blktrace: extract duplidate code
> > > [PATCH v2 6/6] blktrace: print out BLK_TN_MESSAGE properly
> > > ---
> > > blktrace.c | 188 +++++++++++++++++++++++++++++++++------------------------
> > > trace_output.c | 6 -
> > > trace_output.h | 5 -
> > > 3 files changed, 117 insertions(+), 82 deletions(-)
> >
> > Li, Jens - what's your call for v2.6.30, can the blktrace changes go
> > upstream or should i zap the whole thing?
> >
> > There are no new -tip test failures here so it's green as far as i'm
> > concerned. It's holding up the tracing tree so we need to decide one
> > way or another.
>
> If Li deems it ready, then it has my blessing as well.
thanks Jens - i have added your Acked-by's as well.
Ingo
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 0/7] blktrace: last round of fixes
2009-03-30 0:40 ` Li Zefan
@ 2009-03-30 1:23 ` Ingo Molnar
0 siblings, 0 replies; 16+ messages in thread
From: Ingo Molnar @ 2009-03-30 1:23 UTC (permalink / raw)
To: Li Zefan
Cc: Jens Axboe, Arnaldo Carvalho de Melo, Steven Rostedt,
Frederic Weisbecker, LKML
* Li Zefan <lizf@cn.fujitsu.com> wrote:
> Ingo Molnar wrote:
> > * Li Zefan <lizf@cn.fujitsu.com> wrote:
> >
> >> This is the last round of fixes for blktrace, I hope. :)
> >>
> >> Changelog v1 -> v2:
> >> - fix a bug in "blktrace: make classic output more classic",
> >> and rebase other patches.
> >> - re-order patches.
> >> - a new patch for filtering BLK_TN_MESSAGE
> >>
> >> [PATCH v2 1/6] trace: make 'mem' argument of trace_seq_putmem() const
> >> [PATCH v2 2/6] blktrace: make classic output more classic
> >> [PATCH v2 3/6] blktrace: fix blk_probes_ref chaos
> >> [PATCH v2 4/6] blktrace: fix memory leak when freeing struct blk_io_trace
> >> [PATCH v2 5/6] blktrace: extract duplidate code
> >> [PATCH v2 6/6] blktrace: print out BLK_TN_MESSAGE properly
> >> ---
> >> blktrace.c | 188 +++++++++++++++++++++++++++++++++------------------------
> >> trace_output.c | 6 -
> >> trace_output.h | 5 -
> >> 3 files changed, 117 insertions(+), 82 deletions(-)
> >
> > Li, Jens - what's your call for v2.6.30, can the blktrace changes go
> > upstream or should i zap the whole thing?
> >
>
> It should be fine to merge tip/blktrace into .30, and we still
> have 2 month to fix remaining bugs, if any.
ok.
Although regarding instrumentation patches we carry in -tip we aim
to enforce perfect stability right at the point of the merge window.
One major point of instrumentation is to find kernel bugs ... and
it's self-defeating if instrumentation is buggy itself! By the time
the stable kernel is released the most important kernel bugs are
fixed already so having stable instrumentation by that moment is too
late.
So we've got extensive self-tests and other measures in place to
ensure stability.
( The mixed blktrace ioctl/ftrace plugin usage model fell a bit
outside of the expectation of these stability tests though, hence
this relatively slow and late stabilization curve there. It still
looks all fine for .30 to me too. )
Ingo
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2009-03-30 1:24 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-27 5:39 [PATCH v2 0/7] blktrace: last round of fixes Li Zefan
2009-03-27 5:39 ` [PATCH v2 1/7] trace: make 'mem' argument of trace_seq_putmem() const Li Zefan
2009-03-27 5:40 ` [PATCH v2 2/7] blktrace: make classic output more classic Li Zefan
2009-03-27 5:40 ` [PATCH v2 3/7] blktrace: fix blk_probes_ref chaos Li Zefan
2009-03-27 8:13 ` [PATCH v3 " Li Zefan
2009-03-27 5:40 ` [PATCH v2 4/7] blktrace: fix memory leak when freeing struct blk_io_trace Li Zefan
2009-03-27 8:13 ` [PATCH v3 " Li Zefan
2009-03-27 5:41 ` [PATCH v2 5/7] blktrace: extract duplidate code Li Zefan
2009-03-27 5:41 ` [PATCH v2 6/7] blktrace: print out BLK_TN_MESSAGE properly Li Zefan
2009-03-27 5:42 ` [PATCH v2 7/7] blktrace: support filtering of BLK_TN_MESSAGE Li Zefan
2009-03-27 9:42 ` [PATCH v2 0/7] blktrace: last round of fixes Ingo Molnar
2009-03-28 22:46 ` Ingo Molnar
2009-03-29 18:02 ` Jens Axboe
2009-03-30 1:17 ` Ingo Molnar
2009-03-30 0:40 ` Li Zefan
2009-03-30 1:23 ` Ingo Molnar
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox