Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S376242AbXECRWD (ORCPT ); Thu, 3 May 2007 13:22:03 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S376246AbXECRWD (ORCPT ); Thu, 3 May 2007 13:22:03 -0400 Received: from tomts40.bellnexxia.net ([209.226.175.97]:43650 "EHLO tomts40-srv.bellnexxia.net" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S376242AbXECRV7 (ORCPT ); Thu, 3 May 2007 13:21:59 -0400 Date: Thu, 3 May 2007 13:16:46 -0400 From: Mathieu Desnoyers To: Christoph Hellwig , Andrew Morton , Andi Kleen , linux-kernel@vger.kernel.org, rusty@rustcorp.com.au, wfg@ustc.edu Subject: Re: 2.6.22 -mm merge plans Message-ID: <20070503171646.GA506@Krystal> References: <20070501220803.GA27698@Krystal> <20070502104413.GC4392@one.firstfloor.org> <20070502094707.4197ab7a.akpm@linux-foundation.org> <20070502172934.GA17782@infradead.org> <20070502203627.GA18733@Krystal> <20070502135336.6d6d3569.akpm@linux-foundation.org> <20070502231104.GA26045@Krystal> <20070502162135.f949e371.akpm@linux-foundation.org> <20070503150415.GC26864@Krystal> <20070503151201.GA27281@infradead.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: inline In-Reply-To: <20070503151201.GA27281@infradead.org> X-Editor: vi X-Info: http://krystal.dyndns.org:8080 X-Operating-System: Linux/2.4.34-grsec (i686) X-Uptime: 12:56:25 up 90 days, 7:03, 4 users, load average: 3.47, 1.72, 1.30 User-Agent: Mutt/1.5.13 (2006-08-11) Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 23265 Lines: 813 Here is the reworked patch, except a comment : * Christoph Hellwig (hch@infradead.org) wrote: > > +void blk_probe_disconnect(void) > > +{ > > + uint8_t i; > > + > > + for (i = 0; i < NUM_PROBES; i++) { > > + marker_remove_probe(probe_array[i].name); > > + } > > + synchronize_sched(); /* Wait for probes to finish */ > > kprobes does this kind of synchronization internally, so the marker > wrapper should probabl aswell. > The problem appears on heavily loaded systems. Doing 50 synchronize_sched() calls in a row can take up to a few seconds on a 4-way machine. This is why I prefer to do it in the module to which the callbacks belong. Here is the reviewed patch. It depends on a newer version of markers I'll send to Andrew soon. Signed-off-by: Mathieu Desnoyers Index: linux-2.6-lttng/block/elevator.c =================================================================== --- linux-2.6-lttng.orig/block/elevator.c 2007-05-03 12:27:12.000000000 -0400 +++ linux-2.6-lttng/block/elevator.c 2007-05-03 12:54:58.000000000 -0400 @@ -32,7 +32,7 @@ #include #include #include -#include +#include #include #include @@ -571,7 +571,7 @@ unsigned ordseq; int unplug_it = 1; - blk_add_trace_rq(q, rq, BLK_TA_INSERT); + trace_mark(blk_request_insert, "%p %p", q, rq); rq->q = q; @@ -757,7 +757,7 @@ * not be passed by new incoming requests */ rq->cmd_flags |= REQ_STARTED; - blk_add_trace_rq(q, rq, BLK_TA_ISSUE); + trace_mark(blk_request_issue, "%p %p", q, rq); } if (!q->boundary_rq || q->boundary_rq == rq) { Index: linux-2.6-lttng/block/ll_rw_blk.c =================================================================== --- linux-2.6-lttng.orig/block/ll_rw_blk.c 2007-05-03 12:27:12.000000000 -0400 +++ linux-2.6-lttng/block/ll_rw_blk.c 2007-05-03 12:54:58.000000000 -0400 @@ -28,6 +28,7 @@ #include #include #include +#include #include #include @@ -1551,7 +1552,7 @@ if (!test_and_set_bit(QUEUE_FLAG_PLUGGED, &q->queue_flags)) { mod_timer(&q->unplug_timer, jiffies + q->unplug_delay); - blk_add_trace_generic(q, NULL, 0, BLK_TA_PLUG); + trace_mark(blk_plug_device, "%p %p %d", q, NULL, 0); } } @@ -1617,7 +1618,7 @@ * devices don't necessarily have an ->unplug_fn defined */ if (q->unplug_fn) { - blk_add_trace_pdu_int(q, BLK_TA_UNPLUG_IO, NULL, + trace_mark(blk_pdu_unplug_io, "%p %p %d", q, NULL, q->rq.count[READ] + q->rq.count[WRITE]); q->unplug_fn(q); @@ -1628,7 +1629,7 @@ { request_queue_t *q = container_of(work, request_queue_t, unplug_work); - blk_add_trace_pdu_int(q, BLK_TA_UNPLUG_IO, NULL, + trace_mark(blk_pdu_unplug_io, "%p %p %d", q, NULL, q->rq.count[READ] + q->rq.count[WRITE]); q->unplug_fn(q); @@ -1638,7 +1639,7 @@ { request_queue_t *q = (request_queue_t *)data; - blk_add_trace_pdu_int(q, BLK_TA_UNPLUG_TIMER, NULL, + trace_mark(blk_pdu_unplug_timer, "%p %p %d", q, NULL, q->rq.count[READ] + q->rq.count[WRITE]); kblockd_schedule_work(&q->unplug_work); @@ -2148,7 +2149,7 @@ rq_init(q, rq); - blk_add_trace_generic(q, bio, rw, BLK_TA_GETRQ); + trace_mark(blk_get_request, "%p %p %d", q, bio, rw); out: return rq; } @@ -2178,7 +2179,7 @@ if (!rq) { struct io_context *ioc; - blk_add_trace_generic(q, bio, rw, BLK_TA_SLEEPRQ); + trace_mark(blk_sleep_request, "%p %p %d", q, bio, rw); __generic_unplug_device(q); spin_unlock_irq(q->queue_lock); @@ -2252,7 +2253,7 @@ */ void blk_requeue_request(request_queue_t *q, struct request *rq) { - blk_add_trace_rq(q, rq, BLK_TA_REQUEUE); + trace_mark(blk_requeue, "%p %p", q, rq); if (blk_rq_tagged(rq)) blk_queue_end_tag(q, rq); @@ -2937,7 +2938,7 @@ if (!ll_back_merge_fn(q, req, bio)) break; - blk_add_trace_bio(q, bio, BLK_TA_BACKMERGE); + trace_mark(blk_bio_backmerge, "%p %p", q, bio); req->biotail->bi_next = bio; req->biotail = bio; @@ -2954,7 +2955,7 @@ if (!ll_front_merge_fn(q, req, bio)) break; - blk_add_trace_bio(q, bio, BLK_TA_FRONTMERGE); + trace_mark(blk_bio_frontmerge, "%p %p", q, bio); bio->bi_next = req->bio; req->bio = bio; @@ -3184,10 +3185,10 @@ blk_partition_remap(bio); if (old_sector != -1) - blk_add_trace_remap(q, bio, old_dev, bio->bi_sector, - old_sector); + trace_mark(blk_remap, "%p %p %u %llu %llu", q, bio, old_dev, + (u64)bio->bi_sector, (u64)old_sector); - blk_add_trace_bio(q, bio, BLK_TA_QUEUE); + trace_mark(blk_bio_queue, "%p %p", q, bio); old_sector = bio->bi_sector; old_dev = bio->bi_bdev->bd_dev; @@ -3329,7 +3330,7 @@ int total_bytes, bio_nbytes, error, next_idx = 0; struct bio *bio; - blk_add_trace_rq(req->q, req, BLK_TA_COMPLETE); + trace_mark(blk_request_complete, "%p %p", req->q, req); /* * extend uptodate bool to allow < 0 value to be direct io error Index: linux-2.6-lttng/block/Kconfig =================================================================== --- linux-2.6-lttng.orig/block/Kconfig 2007-05-03 12:27:12.000000000 -0400 +++ linux-2.6-lttng/block/Kconfig 2007-05-03 12:54:58.000000000 -0400 @@ -32,6 +32,7 @@ depends on SYSFS select RELAY select DEBUG_FS + select MARKERS help Say Y here, if you want to be able to trace the block layer actions on a given queue. Tracing allows you to see any traffic happening Index: linux-2.6-lttng/block/blktrace.c =================================================================== --- linux-2.6-lttng.orig/block/blktrace.c 2007-05-03 12:27:12.000000000 -0400 +++ linux-2.6-lttng/block/blktrace.c 2007-05-03 13:05:30.000000000 -0400 @@ -23,11 +23,19 @@ #include #include #include +#include #include static DEFINE_PER_CPU(unsigned long long, blk_trace_cpu_offset) = { 0, }; static unsigned int blktrace_seq __read_mostly = 1; +/* Global reference count of probes */ +static DEFINE_MUTEX(blk_probe_mutex); +static int blk_probes_ref; + +int blk_probe_arm(void); +void blk_probe_disarm(void); + /* * Send out a notify message. */ @@ -179,7 +187,7 @@ EXPORT_SYMBOL_GPL(__blk_add_trace); static struct dentry *blk_tree_root; -static struct mutex blk_tree_mutex; +static DEFINE_MUTEX(blk_tree_mutex); static unsigned int root_users; static inline void blk_remove_root(void) @@ -229,6 +237,10 @@ blk_remove_tree(bt->dir); free_percpu(bt->sequence); kfree(bt); + mutex_lock(&blk_probe_mutex); + if (--blk_probes_ref == 0) + blk_probe_disarm(); + mutex_unlock(&blk_probe_mutex); } static int blk_trace_remove(request_queue_t *q) @@ -386,6 +398,11 @@ goto err; } + mutex_lock(&blk_probe_mutex); + if (!blk_probes_ref++) + blk_probe_arm(); + mutex_unlock(&blk_probe_mutex); + return 0; err: if (dir) @@ -549,9 +566,270 @@ #endif } +/** + * blk_add_trace_rq - Add a trace for a request oriented action + * Expected variable arguments : + * @q: queue the io is for + * @rq: the source request + * + * Description: + * Records an action against a request. Will log the bio offset + size. + * + **/ +static void blk_add_trace_rq(const struct __mark_marker_data *mdata, + const char *fmt, ...) +{ + va_list args; + u32 what; + struct blk_trace *bt; + int rw; + struct blk_probe_data *pinfo = mdata->pdata; + struct request_queue *q; + struct request *rq; + + va_start(args, fmt); + q = va_arg(args, struct request_queue *); + rq = va_arg(args, struct request *); + va_end(args); + + what = pinfo->flags; + bt = q->blk_trace; + rw = rq->cmd_flags & 0x03; + + if (likely(!bt)) + return; + + if (blk_pc_request(rq)) { + what |= BLK_TC_ACT(BLK_TC_PC); + __blk_add_trace(bt, 0, rq->data_len, rw, what, rq->errors, sizeof(rq->cmd), rq->cmd); + } else { + what |= BLK_TC_ACT(BLK_TC_FS); + __blk_add_trace(bt, rq->hard_sector, rq->hard_nr_sectors << 9, rw, what, rq->errors, 0, NULL); + } +} + +/** + * blk_add_trace_bio - Add a trace for a bio oriented action + * Expected variable arguments : + * @q: queue the io is for + * @bio: the source bio + * + * Description: + * Records an action against a bio. Will log the bio offset + size. + * + **/ +static void blk_add_trace_bio(const struct __mark_marker_data *mdata, + const char *fmt, ...) +{ + va_list args; + u32 what; + struct blk_trace *bt; + struct blk_probe_data *pinfo = mdata->pdata; + struct request_queue *q; + struct bio *bio; + + va_start(args, fmt); + q = va_arg(args, struct request_queue *); + bio = va_arg(args, struct bio *); + va_end(args); + + what = pinfo->flags; + bt = q->blk_trace; + + if (likely(!bt)) + return; + + __blk_add_trace(bt, bio->bi_sector, bio->bi_size, bio->bi_rw, what, !bio_flagged(bio, BIO_UPTODATE), 0, NULL); +} + +/** + * blk_add_trace_generic - Add a trace for a generic action + * Expected variable arguments : + * @q: queue the io is for + * @bio: the source bio + * @rw: the data direction + * + * Description: + * Records a simple trace + * + **/ +static void blk_add_trace_generic(const struct __mark_marker_data *mdata, + const char *fmt, ...) +{ + va_list args; + struct blk_trace *bt; + u32 what; + struct blk_probe_data *pinfo = mdata->pdata; + struct request_queue *q; + struct bio *bio; + int rw; + + va_start(args, fmt); + q = va_arg(args, struct request_queue *); + bio = va_arg(args, struct bio *); + rw = va_arg(args, int); + va_end(args); + + what = pinfo->flags; + bt = q->blk_trace; + + if (likely(!bt)) + return; + + if (bio) + blk_add_trace_bio(mdata, "%p %p", q, bio); + else + __blk_add_trace(bt, 0, 0, rw, what, 0, 0, NULL); +} + +/** + * blk_add_trace_pdu_int - Add a trace for a bio with an integer payload + * Expected variable arguments : + * @q: queue the io is for + * @bio: the source bio + * @pdu: the integer payload + * + * Description: + * Adds a trace with some integer payload. This might be an unplug + * option given as the action, with the depth at unplug time given + * as the payload + * + **/ +static void blk_add_trace_pdu_int(const struct __mark_marker_data *mdata, + const char *fmt, ...) +{ + va_list args; + struct blk_trace *bt; + u32 what; + struct blk_probe_data *pinfo = mdata->pdata; + struct request_queue *q; + struct bio *bio; + unsigned int pdu; + __be64 rpdu; + + va_start(args, fmt); + q = va_arg(args, struct request_queue *); + bio = va_arg(args, struct bio *); + pdu = va_arg(args, unsigned int); + va_end(args); + + what = pinfo->flags; + bt = q->blk_trace; + rpdu = cpu_to_be64(pdu); + + if (likely(!bt)) + return; + + if (bio) + __blk_add_trace(bt, bio->bi_sector, bio->bi_size, bio->bi_rw, what, !bio_flagged(bio, BIO_UPTODATE), sizeof(rpdu), &rpdu); + else + __blk_add_trace(bt, 0, 0, 0, what, 0, sizeof(rpdu), &rpdu); +} + +/** + * blk_add_trace_remap - Add a trace for a remap operation + * Expected variable arguments : + * @q: queue the io is for + * @bio: the source bio + * @dev: target device + * @from: source sector + * @to: target sector + * + * Description: + * Device mapper or raid target sometimes need to split a bio because + * it spans a stripe (or similar). Add a trace for that action. + * + **/ +static void blk_add_trace_remap(const struct __mark_marker_data *mdata, + const char *fmt, ...) +{ + va_list args; + struct blk_trace *bt; + struct blk_io_trace_remap r; + u32 what; + struct blk_probe_data *pinfo = mdata->pdata; + struct request_queue *q; + struct bio *bio; + u64 dev, from, to; + + va_start(args, fmt); + q = va_arg(args, struct request_queue *); + bio = va_arg(args, struct bio *); + dev = va_arg(args, u64); + from = va_arg(args, u64); + to = va_arg(args, u64); + va_end(args); + + what = pinfo->flags; + bt = q->blk_trace; + + if (likely(!bt)) + return; + + r.device = cpu_to_be32(dev); + r.sector = cpu_to_be64(to); + + __blk_add_trace(bt, from, bio->bi_size, bio->bi_rw, BLK_TA_REMAP, !bio_flagged(bio, BIO_UPTODATE), sizeof(r), &r); +} + +#define FACILITY_NAME "blk" + +static struct blk_probe_data probe_array[] = +{ + { "blk_bio_queue", "%p %p", BLK_TA_QUEUE, blk_add_trace_bio }, + { "blk_bio_backmerge", "%p %p", BLK_TA_BACKMERGE, blk_add_trace_bio }, + { "blk_bio_frontmerge", "%p %p", BLK_TA_FRONTMERGE, blk_add_trace_bio }, + { "blk_get_request", "%p %p %d", BLK_TA_GETRQ, blk_add_trace_generic }, + { "blk_sleep_request", "%p %p %d", BLK_TA_SLEEPRQ, + blk_add_trace_generic }, + { "blk_requeue", "%p %p", BLK_TA_REQUEUE, blk_add_trace_rq }, + { "blk_request_issue", "%p %p", BLK_TA_ISSUE, blk_add_trace_rq }, + { "blk_request_complete", "%p %p", BLK_TA_COMPLETE, blk_add_trace_rq }, + { "blk_plug_device", "%p %p %d", BLK_TA_PLUG, blk_add_trace_generic }, + { "blk_pdu_unplug_io", "%p %p %d", BLK_TA_UNPLUG_IO, + blk_add_trace_pdu_int }, + { "blk_pdu_unplug_timer", "%p %p %d", BLK_TA_UNPLUG_TIMER, + blk_add_trace_pdu_int }, + { "blk_request_insert", "%p %p", BLK_TA_INSERT, + blk_add_trace_rq }, + { "blk_pdu_split", "%p %p %d", BLK_TA_SPLIT, + blk_add_trace_pdu_int }, + { "blk_bio_bounce", "%p %p", BLK_TA_BOUNCE, blk_add_trace_bio }, + { "blk_remap", "%p %p %u %llu %llu", BLK_TA_REMAP, + blk_add_trace_remap }, +}; + + +int blk_probe_arm(void) +{ + int result; + int i; + + for (i = 0; i < ARRAY_SIZE(probe_array); i++) { + result = marker_set_probe(probe_array[i].name, + probe_array[i].format, + probe_array[i].callback, &probe_array[i]); + if (!result) + printk(KERN_INFO + "blktrace unable to register probe %s\n", + probe_array[i].name); + } + return 0; +} + +void blk_probe_disarm(void) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(probe_array); i++) { + marker_remove_probe(probe_array[i].name); + } + synchronize_sched(); /* Wait for probes to finish */ +} + + static __init int blk_trace_init(void) { - mutex_init(&blk_tree_mutex); on_each_cpu(blk_trace_check_cpu_time, NULL, 1, 1); blk_trace_set_ht_offsets(); Index: linux-2.6-lttng/include/linux/blktrace_api.h =================================================================== --- linux-2.6-lttng.orig/include/linux/blktrace_api.h 2007-05-03 12:27:12.000000000 -0400 +++ linux-2.6-lttng/include/linux/blktrace_api.h 2007-05-03 12:54:58.000000000 -0400 @@ -3,6 +3,7 @@ #include #include +#include /* * Trace categories @@ -142,149 +143,24 @@ u32 pid; }; +/* Probe data used for probe-marker connection */ +struct blk_probe_data { + const char *name; + const char *format; + u32 flags; + marker_probe_func *callback; +}; + #if defined(CONFIG_BLK_DEV_IO_TRACE) extern int blk_trace_ioctl(struct block_device *, unsigned, char __user *); extern void blk_trace_shutdown(request_queue_t *); extern void __blk_add_trace(struct blk_trace *, sector_t, int, int, u32, int, int, void *); - -/** - * blk_add_trace_rq - Add a trace for a request oriented action - * @q: queue the io is for - * @rq: the source request - * @what: the action - * - * Description: - * Records an action against a request. Will log the bio offset + size. - * - **/ -static inline void blk_add_trace_rq(struct request_queue *q, struct request *rq, - u32 what) -{ - struct blk_trace *bt = q->blk_trace; - int rw = rq->cmd_flags & 0x03; - - if (likely(!bt)) - return; - - if (blk_pc_request(rq)) { - what |= BLK_TC_ACT(BLK_TC_PC); - __blk_add_trace(bt, 0, rq->data_len, rw, what, rq->errors, sizeof(rq->cmd), rq->cmd); - } else { - what |= BLK_TC_ACT(BLK_TC_FS); - __blk_add_trace(bt, rq->hard_sector, rq->hard_nr_sectors << 9, rw, what, rq->errors, 0, NULL); - } -} - -/** - * blk_add_trace_bio - Add a trace for a bio oriented action - * @q: queue the io is for - * @bio: the source bio - * @what: the action - * - * Description: - * Records an action against a bio. Will log the bio offset + size. - * - **/ -static inline void blk_add_trace_bio(struct request_queue *q, struct bio *bio, - u32 what) -{ - struct blk_trace *bt = q->blk_trace; - - if (likely(!bt)) - return; - - __blk_add_trace(bt, bio->bi_sector, bio->bi_size, bio->bi_rw, what, !bio_flagged(bio, BIO_UPTODATE), 0, NULL); -} - -/** - * blk_add_trace_generic - Add a trace for a generic action - * @q: queue the io is for - * @bio: the source bio - * @rw: the data direction - * @what: the action - * - * Description: - * Records a simple trace - * - **/ -static inline void blk_add_trace_generic(struct request_queue *q, - struct bio *bio, int rw, u32 what) -{ - struct blk_trace *bt = q->blk_trace; - - if (likely(!bt)) - return; - - if (bio) - blk_add_trace_bio(q, bio, what); - else - __blk_add_trace(bt, 0, 0, rw, what, 0, 0, NULL); -} - -/** - * blk_add_trace_pdu_int - Add a trace for a bio with an integer payload - * @q: queue the io is for - * @what: the action - * @bio: the source bio - * @pdu: the integer payload - * - * Description: - * Adds a trace with some integer payload. This might be an unplug - * option given as the action, with the depth at unplug time given - * as the payload - * - **/ -static inline void blk_add_trace_pdu_int(struct request_queue *q, u32 what, - struct bio *bio, unsigned int pdu) -{ - struct blk_trace *bt = q->blk_trace; - __be64 rpdu = cpu_to_be64(pdu); - - if (likely(!bt)) - return; - - if (bio) - __blk_add_trace(bt, bio->bi_sector, bio->bi_size, bio->bi_rw, what, !bio_flagged(bio, BIO_UPTODATE), sizeof(rpdu), &rpdu); - else - __blk_add_trace(bt, 0, 0, 0, what, 0, sizeof(rpdu), &rpdu); -} - -/** - * blk_add_trace_remap - Add a trace for a remap operation - * @q: queue the io is for - * @bio: the source bio - * @dev: target device - * @from: source sector - * @to: target sector - * - * Description: - * Device mapper or raid target sometimes need to split a bio because - * it spans a stripe (or similar). Add a trace for that action. - * - **/ -static inline void blk_add_trace_remap(struct request_queue *q, struct bio *bio, - dev_t dev, sector_t from, sector_t to) -{ - struct blk_trace *bt = q->blk_trace; - struct blk_io_trace_remap r; - - if (likely(!bt)) - return; - - r.device = cpu_to_be32(dev); - r.sector = cpu_to_be64(to); - - __blk_add_trace(bt, from, bio->bi_size, bio->bi_rw, BLK_TA_REMAP, !bio_flagged(bio, BIO_UPTODATE), sizeof(r), &r); -} +extern int blk_probe_connect(void); +extern void blk_probe_disconnect(void); #else /* !CONFIG_BLK_DEV_IO_TRACE */ #define blk_trace_ioctl(bdev, cmd, arg) (-ENOTTY) #define blk_trace_shutdown(q) do { } while (0) -#define blk_add_trace_rq(q, rq, what) do { } while (0) -#define blk_add_trace_bio(q, rq, what) do { } while (0) -#define blk_add_trace_generic(q, rq, rw, what) do { } while (0) -#define blk_add_trace_pdu_int(q, what, bio, pdu) do { } while (0) -#define blk_add_trace_remap(q, bio, dev, f, t) do {} while (0) #endif /* CONFIG_BLK_DEV_IO_TRACE */ #endif Index: linux-2.6-lttng/mm/bounce.c =================================================================== --- linux-2.6-lttng.orig/mm/bounce.c 2007-05-03 12:27:12.000000000 -0400 +++ linux-2.6-lttng/mm/bounce.c 2007-05-03 12:54:58.000000000 -0400 @@ -13,7 +13,7 @@ #include #include #include -#include +#include #include #define POOL_SIZE 64 @@ -237,7 +237,7 @@ if (!bio) return; - blk_add_trace_bio(q, *bio_orig, BLK_TA_BOUNCE); + trace_mark(blk_bio_bounce, "%p %p", q, *bio_orig); /* * at least one page was bounced, fill in possible non-highmem Index: linux-2.6-lttng/mm/highmem.c =================================================================== --- linux-2.6-lttng.orig/mm/highmem.c 2007-05-03 12:27:12.000000000 -0400 +++ linux-2.6-lttng/mm/highmem.c 2007-05-03 12:54:58.000000000 -0400 @@ -26,7 +26,7 @@ #include #include #include -#include +#include #include /* Index: linux-2.6-lttng/fs/bio.c =================================================================== --- linux-2.6-lttng.orig/fs/bio.c 2007-05-03 12:27:12.000000000 -0400 +++ linux-2.6-lttng/fs/bio.c 2007-05-03 12:54:58.000000000 -0400 @@ -25,7 +25,7 @@ #include #include #include -#include +#include #include /* for struct sg_iovec */ #define BIO_POOL_SIZE 2 @@ -1081,7 +1081,7 @@ if (!bp) return bp; - blk_add_trace_pdu_int(bdev_get_queue(bi->bi_bdev), BLK_TA_SPLIT, bi, + trace_mark(blk_pdu_split, "%p %p %d", bdev_get_queue(bi->bi_bdev), bi, bi->bi_sector + first_sectors); BUG_ON(bi->bi_vcnt != 1); Index: linux-2.6-lttng/drivers/block/cciss.c =================================================================== --- linux-2.6-lttng.orig/drivers/block/cciss.c 2007-05-03 12:27:12.000000000 -0400 +++ linux-2.6-lttng/drivers/block/cciss.c 2007-05-03 12:54:58.000000000 -0400 @@ -37,7 +37,7 @@ #include #include #include -#include +#include #include #include @@ -2502,7 +2502,7 @@ } cmd->rq->data_len = 0; cmd->rq->completion_data = cmd; - blk_add_trace_rq(cmd->rq->q, cmd->rq, BLK_TA_COMPLETE); + trace_mark(blk_request_complete, "%p %p", cmd->rq->q, cmd->rq); blk_complete_request(cmd->rq); } Index: linux-2.6-lttng/drivers/md/dm.c =================================================================== --- linux-2.6-lttng.orig/drivers/md/dm.c 2007-05-03 12:27:12.000000000 -0400 +++ linux-2.6-lttng/drivers/md/dm.c 2007-05-03 12:54:58.000000000 -0400 @@ -19,7 +19,7 @@ #include #include #include -#include +#include #include #define DM_MSG_PREFIX "core" @@ -485,8 +485,8 @@ wake_up(&io->md->wait); if (io->error != DM_ENDIO_REQUEUE) { - blk_add_trace_bio(io->md->queue, io->bio, - BLK_TA_COMPLETE); + trace_mark(blk_request_complete, "%p %p", + io->md->queue, io->bio); bio_endio(io->bio, io->bio->bi_size, io->error); } @@ -582,10 +582,10 @@ r = ti->type->map(ti, clone, &tio->info); if (r == DM_MAPIO_REMAPPED) { /* the bio has been remapped so dispatch it */ - - blk_add_trace_remap(bdev_get_queue(clone->bi_bdev), clone, - tio->io->bio->bi_bdev->bd_dev, sector, - clone->bi_sector); + trace_mark(blk_remap, "%p %p %u %llu %llu", + bdev_get_queue(clone->bi_bdev), clone, + (u64)tio->io->bio->bi_bdev->bd_dev, (u64)sector, + (u64)clone->bi_sector); generic_make_request(clone); } else if (r < 0 || r == DM_MAPIO_REQUEUE) { -- Mathieu Desnoyers Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/