* Re: block: make blktrace use per-cpu buffers for message notes
[not found] <200805281559.m4SFx7b9022392@hera.kernel.org>
@ 2008-05-29 6:13 ` Andrew Morton
2008-05-29 6:22 ` Jens Axboe
0 siblings, 1 reply; 7+ messages in thread
From: Andrew Morton @ 2008-05-29 6:13 UTC (permalink / raw)
To: Jens Axboe; +Cc: linux-kernel
On Wed, 28 May 2008 15:59:07 GMT Linux Kernel Mailing List <linux-kernel@vger.kernel.org> wrote:
> Gitweb: http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=64565911cdb57c2f512a9715b985b5617402cc67
> Commit: 64565911cdb57c2f512a9715b985b5617402cc67
> Parent: 4722dc52a891ab6cb2d637ddb87233e0ce277827
> Author: Jens Axboe <jens.axboe@oracle.com>
> AuthorDate: Wed May 28 14:45:33 2008 +0200
> Committer: Jens Axboe <jens.axboe@oracle.com>
> CommitDate: Wed May 28 14:49:27 2008 +0200
please try to avoid merging unreviewed changes.
> block: make blktrace use per-cpu buffers for message notes
>
> Currently it uses a single static char array, but that risks
> being corrupted when multiple users issue message notes at the
> same time. Make the buffers dynamically allocated when the trace
> is setup and make them per-cpu instead.
>
> The default max message size of 1k is also very large, the
> interface is mainly for small text notes. So shrink it to 128 bytes.
>
> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
> ---
> block/blktrace.c | 15 ++++++++++++---
> include/linux/blktrace_api.h | 3 ++-
> 2 files changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/block/blktrace.c b/block/blktrace.c
> index 20e11f3..7ae87cc 100644
> --- a/block/blktrace.c
> +++ b/block/blktrace.c
> @@ -79,13 +79,16 @@ void __trace_note_message(struct blk_trace *bt, const char *fmt, ...)
> {
> int n;
> va_list args;
> - static char bt_msg_buf[BLK_TN_MAX_MSG];
> + char *buf;
>
> + preempt_disable();
> + buf = per_cpu_ptr(bt->msg_data, smp_processor_id());
get_cpu()/put_cpu() is the standard way of doing this.
> @@ -172,7 +173,7 @@ extern void __trace_note_message(struct blk_trace *, const char *fmt, ...);
> if (unlikely(bt)) \
> __trace_note_message(bt, fmt, ##__VA_ARGS__); \
> } while (0)
> -#define BLK_TN_MAX_MSG 1024
> +#define BLK_TN_MAX_MSG 128
It seems a bit strange to do this right when we've taken this _off_ the
stack. But I suppose nothing will break.
I cannot work out why 9d5f09a424a67ddb959829894efb4c71cbf6d600 ("Added
in MESSAGE notes for blktraces") was -rc material.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: block: make blktrace use per-cpu buffers for message notes
2008-05-29 6:13 ` block: make blktrace use per-cpu buffers for message notes Andrew Morton
@ 2008-05-29 6:22 ` Jens Axboe
2008-05-29 6:38 ` Andrew Morton
0 siblings, 1 reply; 7+ messages in thread
From: Jens Axboe @ 2008-05-29 6:22 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel
On Wed, May 28 2008, Andrew Morton wrote:
> On Wed, 28 May 2008 15:59:07 GMT Linux Kernel Mailing List <linux-kernel@vger.kernel.org> wrote:
>
> > Gitweb: http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=64565911cdb57c2f512a9715b985b5617402cc67
> > Commit: 64565911cdb57c2f512a9715b985b5617402cc67
> > Parent: 4722dc52a891ab6cb2d637ddb87233e0ce277827
> > Author: Jens Axboe <jens.axboe@oracle.com>
> > AuthorDate: Wed May 28 14:45:33 2008 +0200
> > Committer: Jens Axboe <jens.axboe@oracle.com>
> > CommitDate: Wed May 28 14:49:27 2008 +0200
>
> please try to avoid merging unreviewed changes.
Just because you didn't review it doesn't mean it's unreviewed :-)
It's not unreviewed, it was posted on lkml and a few version were
bounced back and forth.
> > block: make blktrace use per-cpu buffers for message notes
> >
> > Currently it uses a single static char array, but that risks
> > being corrupted when multiple users issue message notes at the
> > same time. Make the buffers dynamically allocated when the trace
> > is setup and make them per-cpu instead.
> >
> > The default max message size of 1k is also very large, the
> > interface is mainly for small text notes. So shrink it to 128 bytes.
> >
> > Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
> > ---
> > block/blktrace.c | 15 ++++++++++++---
> > include/linux/blktrace_api.h | 3 ++-
> > 2 files changed, 14 insertions(+), 4 deletions(-)
> >
> > diff --git a/block/blktrace.c b/block/blktrace.c
> > index 20e11f3..7ae87cc 100644
> > --- a/block/blktrace.c
> > +++ b/block/blktrace.c
> > @@ -79,13 +79,16 @@ void __trace_note_message(struct blk_trace *bt, const char *fmt, ...)
> > {
> > int n;
> > va_list args;
> > - static char bt_msg_buf[BLK_TN_MAX_MSG];
> > + char *buf;
> >
> > + preempt_disable();
> > + buf = per_cpu_ptr(bt->msg_data, smp_processor_id());
>
> get_cpu()/put_cpu() is the standard way of doing this.
Sure, end result is the same though. get_cpu()/put_cpu() is cleaner,
though.
> > @@ -172,7 +173,7 @@ extern void __trace_note_message(struct blk_trace *, const char *fmt, ...);
> > if (unlikely(bt)) \
> > __trace_note_message(bt, fmt, ##__VA_ARGS__); \
> > } while (0)
> > -#define BLK_TN_MAX_MSG 1024
> > +#define BLK_TN_MAX_MSG 128
>
> It seems a bit strange to do this right when we've taken this _off_ the
> stack. But I suppose nothing will break.
It was never on the stack, it was a global static char array. We are
still allocating memory for this, per-cpu. So I think it still makes
sense to shrink the size. It's really meant for small trace messages,
128 bytes is plenty. It's an in-kernel property, the userland app
doesn't care. So we could easily grow this in the future, should the
need arise.
> I cannot work out why 9d5f09a424a67ddb959829894efb4c71cbf6d600 ("Added
> in MESSAGE notes for blktraces") was -rc material.
Well it's probably really not, but the impact is truly minimal. But
strictly speaking, it was not -rcX material, I agree.
--
Jens Axboe
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: block: make blktrace use per-cpu buffers for message notes
2008-05-29 6:22 ` Jens Axboe
@ 2008-05-29 6:38 ` Andrew Morton
2008-05-29 6:45 ` Jens Axboe
0 siblings, 1 reply; 7+ messages in thread
From: Andrew Morton @ 2008-05-29 6:38 UTC (permalink / raw)
To: Jens Axboe; +Cc: linux-kernel
On Thu, 29 May 2008 08:22:15 +0200 Jens Axboe <jens.axboe@oracle.com> wrote:
> On Wed, May 28 2008, Andrew Morton wrote:
> > On Wed, 28 May 2008 15:59:07 GMT Linux Kernel Mailing List <linux-kernel@vger.kernel.org> wrote:
> >
> > > Gitweb: http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=64565911cdb57c2f512a9715b985b5617402cc67
> > > Commit: 64565911cdb57c2f512a9715b985b5617402cc67
> > > Parent: 4722dc52a891ab6cb2d637ddb87233e0ce277827
> > > Author: Jens Axboe <jens.axboe@oracle.com>
> > > AuthorDate: Wed May 28 14:45:33 2008 +0200
> > > Committer: Jens Axboe <jens.axboe@oracle.com>
> > > CommitDate: Wed May 28 14:49:27 2008 +0200
> >
> > please try to avoid merging unreviewed changes.
>
> Just because you didn't review it doesn't mean it's unreviewed :-)
>
> It's not unreviewed, it was posted on lkml and a few version were
> bounced back and forth.
OK. The Subject: swizzling confounded me.
> > > if (unlikely(bt)) \
> > > __trace_note_message(bt, fmt, ##__VA_ARGS__); \
> > > } while (0)
> > > -#define BLK_TN_MAX_MSG 1024
> > > +#define BLK_TN_MAX_MSG 128
> >
> > It seems a bit strange to do this right when we've taken this _off_ the
> > stack. But I suppose nothing will break.
>
> It was never on the stack, it was a global static char array. We are
> still allocating memory for this, per-cpu. So I think it still makes
> sense to shrink the size. It's really meant for small trace messages,
> 128 bytes is plenty. It's an in-kernel property, the userland app
> doesn't care. So we could easily grow this in the future, should the
> need arise.
yup.
It's a bit sad to stage the data in a local per-cpu buffer and then
copy it into relay's per-cpu buffer. I guess this is because the
length of the output isn't known beforehand. Could be fixed by doing
what kvasprintf() does, but that might well be slower.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: block: make blktrace use per-cpu buffers for message notes
2008-05-29 6:38 ` Andrew Morton
@ 2008-05-29 6:45 ` Jens Axboe
2008-05-29 7:09 ` Jens Axboe
0 siblings, 1 reply; 7+ messages in thread
From: Jens Axboe @ 2008-05-29 6:45 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel
On Wed, May 28 2008, Andrew Morton wrote:
> On Thu, 29 May 2008 08:22:15 +0200 Jens Axboe <jens.axboe@oracle.com> wrote:
>
> > On Wed, May 28 2008, Andrew Morton wrote:
> > > On Wed, 28 May 2008 15:59:07 GMT Linux Kernel Mailing List <linux-kernel@vger.kernel.org> wrote:
> > >
> > > > Gitweb: http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=64565911cdb57c2f512a9715b985b5617402cc67
> > > > Commit: 64565911cdb57c2f512a9715b985b5617402cc67
> > > > Parent: 4722dc52a891ab6cb2d637ddb87233e0ce277827
> > > > Author: Jens Axboe <jens.axboe@oracle.com>
> > > > AuthorDate: Wed May 28 14:45:33 2008 +0200
> > > > Committer: Jens Axboe <jens.axboe@oracle.com>
> > > > CommitDate: Wed May 28 14:49:27 2008 +0200
> > >
> > > please try to avoid merging unreviewed changes.
> >
> > Just because you didn't review it doesn't mean it's unreviewed :-)
> >
> > It's not unreviewed, it was posted on lkml and a few version were
> > bounced back and forth.
>
> OK. The Subject: swizzling confounded me.
>
> > > > if (unlikely(bt)) \
> > > > __trace_note_message(bt, fmt, ##__VA_ARGS__); \
> > > > } while (0)
> > > > -#define BLK_TN_MAX_MSG 1024
> > > > +#define BLK_TN_MAX_MSG 128
> > >
> > > It seems a bit strange to do this right when we've taken this _off_ the
> > > stack. But I suppose nothing will break.
> >
> > It was never on the stack, it was a global static char array. We are
> > still allocating memory for this, per-cpu. So I think it still makes
> > sense to shrink the size. It's really meant for small trace messages,
> > 128 bytes is plenty. It's an in-kernel property, the userland app
> > doesn't care. So we could easily grow this in the future, should the
> > need arise.
>
> yup.
>
> It's a bit sad to stage the data in a local per-cpu buffer and then
> copy it into relay's per-cpu buffer. I guess this is because the
> length of the output isn't known beforehand. Could be fixed by doing
> what kvasprintf() does, but that might well be slower.
I agree, this is what we debated. My reasoning is that it's better
to minimize usage of the relay buffer, so the stage-and-copy doesn't
matter a whole lot.
I seem to recall a relay_unreserve() patch from Tom back in the day,
if we had something like that we could do the optimal approach of:
buf = relay_reserver(max_size);
n = vscnprintf(buf, max_size, ...);
if (max_size - n)
relay_unreserve(max_size - n);
and get the best of both worlds. But, again, it's not really a big deal
I think.
My main interest in this is adding cfq trace messages, so we have
direct ways of comparing queue+dispatch with what cfq is deciding to
do.
--
Jens Axboe
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: block: make blktrace use per-cpu buffers for message notes
2008-05-29 6:45 ` Jens Axboe
@ 2008-05-29 7:09 ` Jens Axboe
2008-05-29 7:20 ` Andrew Morton
0 siblings, 1 reply; 7+ messages in thread
From: Jens Axboe @ 2008-05-29 7:09 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel
On Thu, May 29 2008, Jens Axboe wrote:
> On Wed, May 28 2008, Andrew Morton wrote:
> > On Thu, 29 May 2008 08:22:15 +0200 Jens Axboe <jens.axboe@oracle.com> wrote:
> >
> > > On Wed, May 28 2008, Andrew Morton wrote:
> > > > On Wed, 28 May 2008 15:59:07 GMT Linux Kernel Mailing List <linux-kernel@vger.kernel.org> wrote:
> > > >
> > > > > Gitweb: http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=64565911cdb57c2f512a9715b985b5617402cc67
> > > > > Commit: 64565911cdb57c2f512a9715b985b5617402cc67
> > > > > Parent: 4722dc52a891ab6cb2d637ddb87233e0ce277827
> > > > > Author: Jens Axboe <jens.axboe@oracle.com>
> > > > > AuthorDate: Wed May 28 14:45:33 2008 +0200
> > > > > Committer: Jens Axboe <jens.axboe@oracle.com>
> > > > > CommitDate: Wed May 28 14:49:27 2008 +0200
> > > >
> > > > please try to avoid merging unreviewed changes.
> > >
> > > Just because you didn't review it doesn't mean it's unreviewed :-)
> > >
> > > It's not unreviewed, it was posted on lkml and a few version were
> > > bounced back and forth.
> >
> > OK. The Subject: swizzling confounded me.
> >
> > > > > if (unlikely(bt)) \
> > > > > __trace_note_message(bt, fmt, ##__VA_ARGS__); \
> > > > > } while (0)
> > > > > -#define BLK_TN_MAX_MSG 1024
> > > > > +#define BLK_TN_MAX_MSG 128
> > > >
> > > > It seems a bit strange to do this right when we've taken this _off_ the
> > > > stack. But I suppose nothing will break.
> > >
> > > It was never on the stack, it was a global static char array. We are
> > > still allocating memory for this, per-cpu. So I think it still makes
> > > sense to shrink the size. It's really meant for small trace messages,
> > > 128 bytes is plenty. It's an in-kernel property, the userland app
> > > doesn't care. So we could easily grow this in the future, should the
> > > need arise.
> >
> > yup.
> >
> > It's a bit sad to stage the data in a local per-cpu buffer and then
> > copy it into relay's per-cpu buffer. I guess this is because the
> > length of the output isn't known beforehand. Could be fixed by doing
> > what kvasprintf() does, but that might well be slower.
>
> I agree, this is what we debated. My reasoning is that it's better
> to minimize usage of the relay buffer, so the stage-and-copy doesn't
> matter a whole lot.
>
> I seem to recall a relay_unreserve() patch from Tom back in the day,
> if we had something like that we could do the optimal approach of:
So I dug back into the old archives, and the patch was actually done
by me back in feb 2006. Not sure I particularly like it or if it
even works in this forward ported version, but it should get the
point across. blktrace is the sole user of relay_reserve(), so I
think it would be OK to change the interface.
This is clearly NOT 2.6.26 material though, but it's food for
thought (I hope).
diff --git a/block/blktrace.c b/block/blktrace.c
index 7ae87cc..8583bfc 100644
--- a/block/blktrace.c
+++ b/block/blktrace.c
@@ -27,6 +27,18 @@
static unsigned int blktrace_seq __read_mostly = 1;
+static void note_header(struct blk_io_trace *t, struct blk_trace *bt,
+ pid_t pid, int action, size_t len)
+{
+ t->magic = BLK_IO_TRACE_MAGIC | BLK_IO_TRACE_VERSION;
+ t->time = ktime_to_ns(ktime_get());
+ t->device = bt->dev;
+ t->action = action;
+ t->pid = pid;
+ t->cpu = smp_processor_id();
+ t->pdu_len = len;
+}
+
/*
* Send out a notify message.
*/
@@ -37,16 +49,9 @@ static void trace_note(struct blk_trace *bt, pid_t pid, int action,
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());
- t->device = bt->dev;
- t->action = action;
- t->pid = pid;
- t->cpu = cpu;
- t->pdu_len = len;
+ note_header(t, bt, pid, action, len);
memcpy((void *) t + sizeof(*t), data, len);
+ relay_commit_reserve(bt->rchan);
}
}
@@ -77,17 +82,24 @@ static void trace_note_time(struct blk_trace *bt)
void __trace_note_message(struct blk_trace *bt, const char *fmt, ...)
{
- int n;
- va_list args;
- char *buf;
+ struct blk_io_trace *t;
preempt_disable();
- buf = per_cpu_ptr(bt->msg_data, smp_processor_id());
- va_start(args, fmt);
- n = vscnprintf(buf, BLK_TN_MAX_MSG, fmt, args);
- va_end(args);
+ t = relay_reserve(bt->rchan, sizeof(*t) + BLK_TN_MAX_MSG);
+ if (t) {
+ va_list args;
+ char *buf = (void *) t + sizeof(*t);
+ int len;
- trace_note(bt, 0, BLK_TN_MESSAGE, buf, n);
+ va_start(args, fmt);
+ len = vscnprintf(buf, BLK_TN_MAX_MSG, fmt, args);
+ va_end(args);
+
+ if (BLK_TN_MAX_MSG - len)
+ relay_unreserve(bt->rchan, BLK_TN_MAX_MSG - len);
+
+ relay_commit_reserve(bt->rchan);
+ }
preempt_enable();
}
EXPORT_SYMBOL_GPL(__trace_note_message);
@@ -187,6 +199,7 @@ void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes,
if (pdu_len)
memcpy((void *) t + sizeof(*t), pdu_data, pdu_len);
+ relay_commit_reserve(bt->rchan);
}
local_irq_restore(flags);
diff --git a/include/linux/relay.h b/include/linux/relay.h
index 6cd8c44..593f27f 100644
--- a/include/linux/relay.h
+++ b/include/linux/relay.h
@@ -35,6 +35,7 @@ struct rchan_buf
void *start; /* start of channel buffer */
void *data; /* start of current sub-buffer */
size_t offset; /* current offset into sub-buffer */
+ size_t reserve_offset;
size_t subbufs_produced; /* count of sub-buffers produced */
size_t subbufs_consumed; /* count of sub-buffers consumed */
struct rchan *chan; /* associated channel */
@@ -206,6 +207,7 @@ static inline void relay_write(struct rchan *chan,
length = relay_switch_subbuf(buf, length);
memcpy(buf->data + buf->offset, data, length);
buf->offset += length;
+ buf->reserve_offset = buf->offset;
local_irq_restore(flags);
}
@@ -232,6 +234,7 @@ static inline void __relay_write(struct rchan *chan,
length = relay_switch_subbuf(buf, length);
memcpy(buf->data + buf->offset, data, length);
buf->offset += length;
+ buf->reserve_offset = buf->offset;
put_cpu();
}
@@ -244,7 +247,8 @@ static inline void __relay_write(struct rchan *chan,
*
* Reserves a slot in the current cpu's channel buffer.
* Does not protect the buffer at all - caller must provide
- * appropriate synchronization.
+ * appropriate synchronization. Must be paired directly with
+ * a call to @relay_commit_reserve or @relay_unreserve.
*/
static inline void *relay_reserve(struct rchan *chan, size_t length)
{
@@ -257,11 +261,25 @@ static inline void *relay_reserve(struct rchan *chan, size_t length)
return NULL;
}
reserved = buf->data + buf->offset;
- buf->offset += length;
+ buf->reserve_offset += length;
return reserved;
}
+static inline void relay_unreserve(struct rchan *chan, size_t length)
+{
+ struct rchan_buf *buf = chan->buf[smp_processor_id()];
+
+ buf->reserve_offset -= length;
+}
+
+static inline void relay_commit_reserve(struct rchan *chan)
+{
+ struct rchan_buf *buf = chan->buf[smp_processor_id()];
+
+ buf->offset = buf->reserve_offset;
+}
+
/**
* subbuf_start_reserve - reserve bytes at the start of a sub-buffer
* @buf: relay channel buffer
diff --git a/kernel/relay.c b/kernel/relay.c
index 7de644c..9208bd9 100644
--- a/kernel/relay.c
+++ b/kernel/relay.c
@@ -369,6 +369,7 @@ static void __relay_reset(struct rchan_buf *buf, unsigned int init)
buf->finalized = 0;
buf->data = buf->start;
buf->offset = 0;
+ buf->reserve_offset = 0;
for (i = 0; i < buf->chan->n_subbufs; i++)
buf->padding[i] = 0;
@@ -644,8 +645,10 @@ size_t relay_switch_subbuf(struct rchan_buf *buf, size_t length)
new_subbuf = buf->subbufs_produced % buf->chan->n_subbufs;
new = buf->start + new_subbuf * buf->chan->subbuf_size;
buf->offset = 0;
+ buf->reserve_offset = 0;
if (!buf->chan->cb->subbuf_start(buf, new, old, buf->prev_padding)) {
buf->offset = buf->chan->subbuf_size + 1;
+ buf->reserve_offset = buf->offset;
return 0;
}
buf->data = new;
--
Jens Axboe
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: block: make blktrace use per-cpu buffers for message notes
2008-05-29 7:09 ` Jens Axboe
@ 2008-05-29 7:20 ` Andrew Morton
2008-05-29 7:23 ` Jens Axboe
0 siblings, 1 reply; 7+ messages in thread
From: Andrew Morton @ 2008-05-29 7:20 UTC (permalink / raw)
To: Jens Axboe; +Cc: linux-kernel
On Thu, 29 May 2008 09:09:15 +0200 Jens Axboe <jens.axboe@oracle.com> wrote:
> So I dug back into the old archives, and the patch was actually done
> by me back in feb 2006. Not sure I particularly like it or if it
> even works in this forward ported version, but it should get the
> point across. blktrace is the sole user of relay_reserve(), so I
> think it would be OK to change the interface.
>
> This is clearly NOT 2.6.26 material though, but it's food for
> thought (I hope).
hm, it's not pretty, is it. I think I prefer the existing code unless
there are other users of this.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: block: make blktrace use per-cpu buffers for message notes
2008-05-29 7:20 ` Andrew Morton
@ 2008-05-29 7:23 ` Jens Axboe
0 siblings, 0 replies; 7+ messages in thread
From: Jens Axboe @ 2008-05-29 7:23 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel
On Thu, May 29 2008, Andrew Morton wrote:
> On Thu, 29 May 2008 09:09:15 +0200 Jens Axboe <jens.axboe@oracle.com> wrote:
>
> > So I dug back into the old archives, and the patch was actually done
> > by me back in feb 2006. Not sure I particularly like it or if it
> > even works in this forward ported version, but it should get the
> > point across. blktrace is the sole user of relay_reserve(), so I
> > think it would be OK to change the interface.
> >
> > This is clearly NOT 2.6.26 material though, but it's food for
> > thought (I hope).
>
> hm, it's not pretty, is it. I think I prefer the existing code unless
> there are other users of this.
It is not pretty, it's pretty much a hack :-)
So lets just keep the current code. It's an extra copy, but at
least it's nice'n clean.
--
Jens Axboe
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2008-05-29 7:23 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <200805281559.m4SFx7b9022392@hera.kernel.org>
2008-05-29 6:13 ` block: make blktrace use per-cpu buffers for message notes Andrew Morton
2008-05-29 6:22 ` Jens Axboe
2008-05-29 6:38 ` Andrew Morton
2008-05-29 6:45 ` Jens Axboe
2008-05-29 7:09 ` Jens Axboe
2008-05-29 7:20 ` Andrew Morton
2008-05-29 7:23 ` Jens Axboe
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox