diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-04-15 11:01:13 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-04-15 11:01:13 -0400 |
commit | 5853b4f06f7b9b56f37f457d7923f7b96496074e (patch) | |
tree | 8cf850e91b26af25071f00055fa89fb924796de6 /include | |
parent | a970f5d513163a305d46f330d0a7d2dd4c4506f1 (diff) | |
parent | f6603783f9f099bf7a83b3f6c689bbbf74f0e96e (diff) |
Merge branch 'for-linus' of git://git.kernel.dk/linux-2.6-block
* 'for-linus' of git://git.kernel.dk/linux-2.6-block:
block: only force kblockd unplugging from the schedule() path
block: cleanup the block plug helper functions
block, blk-sysfs: Use the variable directly instead of a function call
block: move queue run on unplug to kblockd
block: kill queue_sync_plugs()
block: readd plug trace event
block: add callback function for unplug notification
block: add comment on why we save and disable interrupts in flush_plug_list()
block: fixup block IO unplug trace call
block: remove block_unplug_timer() trace point
block: splice plug list to local context
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/blkdev.h | 9 | ||||
-rw-r--r-- | include/trace/events/block.h | 25 |
2 files changed, 12 insertions, 22 deletions
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 32176cc8e715..1c76506fcf11 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -196,6 +196,7 @@ typedef void (request_fn_proc) (struct request_queue *q); | |||
196 | typedef int (make_request_fn) (struct request_queue *q, struct bio *bio); | 196 | typedef int (make_request_fn) (struct request_queue *q, struct bio *bio); |
197 | typedef int (prep_rq_fn) (struct request_queue *, struct request *); | 197 | typedef int (prep_rq_fn) (struct request_queue *, struct request *); |
198 | typedef void (unprep_rq_fn) (struct request_queue *, struct request *); | 198 | typedef void (unprep_rq_fn) (struct request_queue *, struct request *); |
199 | typedef void (unplugged_fn) (struct request_queue *); | ||
199 | 200 | ||
200 | struct bio_vec; | 201 | struct bio_vec; |
201 | struct bvec_merge_data { | 202 | struct bvec_merge_data { |
@@ -283,6 +284,7 @@ struct request_queue | |||
283 | rq_timed_out_fn *rq_timed_out_fn; | 284 | rq_timed_out_fn *rq_timed_out_fn; |
284 | dma_drain_needed_fn *dma_drain_needed; | 285 | dma_drain_needed_fn *dma_drain_needed; |
285 | lld_busy_fn *lld_busy_fn; | 286 | lld_busy_fn *lld_busy_fn; |
287 | unplugged_fn *unplugged_fn; | ||
286 | 288 | ||
287 | /* | 289 | /* |
288 | * Dispatch queue sorting | 290 | * Dispatch queue sorting |
@@ -841,6 +843,7 @@ extern void blk_queue_dma_alignment(struct request_queue *, int); | |||
841 | extern void blk_queue_update_dma_alignment(struct request_queue *, int); | 843 | extern void blk_queue_update_dma_alignment(struct request_queue *, int); |
842 | extern void blk_queue_softirq_done(struct request_queue *, softirq_done_fn *); | 844 | extern void blk_queue_softirq_done(struct request_queue *, softirq_done_fn *); |
843 | extern void blk_queue_rq_timed_out(struct request_queue *, rq_timed_out_fn *); | 845 | extern void blk_queue_rq_timed_out(struct request_queue *, rq_timed_out_fn *); |
846 | extern void blk_queue_unplugged(struct request_queue *, unplugged_fn *); | ||
844 | extern void blk_queue_rq_timeout(struct request_queue *, unsigned int); | 847 | extern void blk_queue_rq_timeout(struct request_queue *, unsigned int); |
845 | extern void blk_queue_flush(struct request_queue *q, unsigned int flush); | 848 | extern void blk_queue_flush(struct request_queue *q, unsigned int flush); |
846 | extern struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev); | 849 | extern struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev); |
@@ -862,14 +865,14 @@ struct blk_plug { | |||
862 | 865 | ||
863 | extern void blk_start_plug(struct blk_plug *); | 866 | extern void blk_start_plug(struct blk_plug *); |
864 | extern void blk_finish_plug(struct blk_plug *); | 867 | extern void blk_finish_plug(struct blk_plug *); |
865 | extern void __blk_flush_plug(struct task_struct *, struct blk_plug *); | 868 | extern void blk_flush_plug_list(struct blk_plug *, bool); |
866 | 869 | ||
867 | static inline void blk_flush_plug(struct task_struct *tsk) | 870 | static inline void blk_flush_plug(struct task_struct *tsk) |
868 | { | 871 | { |
869 | struct blk_plug *plug = tsk->plug; | 872 | struct blk_plug *plug = tsk->plug; |
870 | 873 | ||
871 | if (unlikely(plug)) | 874 | if (plug) |
872 | __blk_flush_plug(tsk, plug); | 875 | blk_flush_plug_list(plug, true); |
873 | } | 876 | } |
874 | 877 | ||
875 | static inline bool blk_needs_flush_plug(struct task_struct *tsk) | 878 | static inline bool blk_needs_flush_plug(struct task_struct *tsk) |
diff --git a/include/trace/events/block.h b/include/trace/events/block.h index 78f18adb49c8..006e60b58306 100644 --- a/include/trace/events/block.h +++ b/include/trace/events/block.h | |||
@@ -401,9 +401,9 @@ TRACE_EVENT(block_plug, | |||
401 | 401 | ||
402 | DECLARE_EVENT_CLASS(block_unplug, | 402 | DECLARE_EVENT_CLASS(block_unplug, |
403 | 403 | ||
404 | TP_PROTO(struct request_queue *q), | 404 | TP_PROTO(struct request_queue *q, unsigned int depth), |
405 | 405 | ||
406 | TP_ARGS(q), | 406 | TP_ARGS(q, depth), |
407 | 407 | ||
408 | TP_STRUCT__entry( | 408 | TP_STRUCT__entry( |
409 | __field( int, nr_rq ) | 409 | __field( int, nr_rq ) |
@@ -411,7 +411,7 @@ DECLARE_EVENT_CLASS(block_unplug, | |||
411 | ), | 411 | ), |
412 | 412 | ||
413 | TP_fast_assign( | 413 | TP_fast_assign( |
414 | __entry->nr_rq = q->rq.count[READ] + q->rq.count[WRITE]; | 414 | __entry->nr_rq = depth; |
415 | memcpy(__entry->comm, current->comm, TASK_COMM_LEN); | 415 | memcpy(__entry->comm, current->comm, TASK_COMM_LEN); |
416 | ), | 416 | ), |
417 | 417 | ||
@@ -419,31 +419,18 @@ DECLARE_EVENT_CLASS(block_unplug, | |||
419 | ); | 419 | ); |
420 | 420 | ||
421 | /** | 421 | /** |
422 | * block_unplug_timer - timed release of operations requests in queue to device driver | ||
423 | * @q: request queue to unplug | ||
424 | * | ||
425 | * Unplug the request queue @q because a timer expired and allow block | ||
426 | * operation requests to be sent to the device driver. | ||
427 | */ | ||
428 | DEFINE_EVENT(block_unplug, block_unplug_timer, | ||
429 | |||
430 | TP_PROTO(struct request_queue *q), | ||
431 | |||
432 | TP_ARGS(q) | ||
433 | ); | ||
434 | |||
435 | /** | ||
436 | * block_unplug_io - release of operations requests in request queue | 422 | * block_unplug_io - release of operations requests in request queue |
437 | * @q: request queue to unplug | 423 | * @q: request queue to unplug |
424 | * @depth: number of requests just added to the queue | ||
438 | * | 425 | * |
439 | * Unplug request queue @q because device driver is scheduled to work | 426 | * Unplug request queue @q because device driver is scheduled to work |
440 | * on elements in the request queue. | 427 | * on elements in the request queue. |
441 | */ | 428 | */ |
442 | DEFINE_EVENT(block_unplug, block_unplug_io, | 429 | DEFINE_EVENT(block_unplug, block_unplug_io, |
443 | 430 | ||
444 | TP_PROTO(struct request_queue *q), | 431 | TP_PROTO(struct request_queue *q, unsigned int depth), |
445 | 432 | ||
446 | TP_ARGS(q) | 433 | TP_ARGS(q, depth) |
447 | ); | 434 | ); |
448 | 435 | ||
449 | /** | 436 | /** |