diff options
| -rw-r--r-- | drivers/block/ll_rw_blk.c | 11 | ||||
| -rw-r--r-- | include/linux/blkdev.h | 5 | ||||
| -rw-r--r-- | include/linux/ide.h | 2 |
3 files changed, 18 insertions, 0 deletions
diff --git a/drivers/block/ll_rw_blk.c b/drivers/block/ll_rw_blk.c index 98a3182919c5..c6d1d2345db5 100644 --- a/drivers/block/ll_rw_blk.c +++ b/drivers/block/ll_rw_blk.c @@ -136,6 +136,12 @@ struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev) return ret; } +void blk_queue_activity_fn(request_queue_t *q, activity_fn *fn, void *data) +{ + q->activity_fn = fn; + q->activity_data = data; +} + /** * blk_queue_prep_rq - set a prepare_request function for queue * @q: queue @@ -225,6 +231,8 @@ void blk_queue_make_request(request_queue_t * q, make_request_fn * mfn) blk_queue_bounce_limit(q, BLK_BOUNCE_HIGH); INIT_LIST_HEAD(&q->plug_list); + + blk_queue_activity_fn(q, NULL, NULL); } /** @@ -1666,6 +1674,9 @@ static inline void add_request(request_queue_t * q, struct request * req, { drive_stat_acct(req, req->nr_sectors, 1); + if (q->activity_fn) + q->activity_fn(q->activity_data, rq_data_dir(req)); + /* * elevator indicated where it wants this request to be * inserted at elevator_merge time diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index a5c8772b6463..99dbf0d24eaf 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -243,6 +243,7 @@ typedef void (unplug_fn) (void *q); struct bio_vec; typedef int (merge_bvec_fn) (request_queue_t *, struct bio *, struct bio_vec *); +typedef void (activity_fn) (void *data, int rw); enum blk_queue_state { Queue_down, @@ -283,6 +284,7 @@ struct request_queue prep_rq_fn *prep_rq_fn; unplug_fn *unplug_fn; merge_bvec_fn *merge_bvec_fn; + activity_fn *activity_fn; /* * Auto-unplugging state @@ -300,6 +302,8 @@ struct request_queue */ void *queuedata; + void *activity_data; + /* * queue needs bounce pages for pages above this limit */ @@ -504,6 +508,7 @@ extern void blk_start_queue(request_queue_t *q); extern void blk_stop_queue(request_queue_t *q); extern void __blk_stop_queue(request_queue_t *q); extern void blk_run_queue(request_queue_t *q); +extern void blk_queue_activity_fn(request_queue_t *, activity_fn *, void *); static inline request_queue_t *bdev_get_queue(struct block_device *bdev) { diff --git a/include/linux/ide.h b/include/linux/ide.h index a68f7871d3bb..98a1a968ad93 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h @@ -1044,6 +1044,8 @@ typedef struct hwif_s { void *hwif_data; /* extra hwif data */ unsigned dma; + + void (*led_act)(void *data, int rw); } ide_hwif_t; /* |
