aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2011-04-15 11:01:13 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2011-04-15 11:01:13 -0400
commit5853b4f06f7b9b56f37f457d7923f7b96496074e (patch)
tree8cf850e91b26af25071f00055fa89fb924796de6 /include
parenta970f5d513163a305d46f330d0a7d2dd4c4506f1 (diff)
parentf6603783f9f099bf7a83b3f6c689bbbf74f0e96e (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.h9
-rw-r--r--include/trace/events/block.h25
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);
196typedef int (make_request_fn) (struct request_queue *q, struct bio *bio); 196typedef int (make_request_fn) (struct request_queue *q, struct bio *bio);
197typedef int (prep_rq_fn) (struct request_queue *, struct request *); 197typedef int (prep_rq_fn) (struct request_queue *, struct request *);
198typedef void (unprep_rq_fn) (struct request_queue *, struct request *); 198typedef void (unprep_rq_fn) (struct request_queue *, struct request *);
199typedef void (unplugged_fn) (struct request_queue *);
199 200
200struct bio_vec; 201struct bio_vec;
201struct bvec_merge_data { 202struct 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);
841extern void blk_queue_update_dma_alignment(struct request_queue *, int); 843extern void blk_queue_update_dma_alignment(struct request_queue *, int);
842extern void blk_queue_softirq_done(struct request_queue *, softirq_done_fn *); 844extern void blk_queue_softirq_done(struct request_queue *, softirq_done_fn *);
843extern void blk_queue_rq_timed_out(struct request_queue *, rq_timed_out_fn *); 845extern void blk_queue_rq_timed_out(struct request_queue *, rq_timed_out_fn *);
846extern void blk_queue_unplugged(struct request_queue *, unplugged_fn *);
844extern void blk_queue_rq_timeout(struct request_queue *, unsigned int); 847extern void blk_queue_rq_timeout(struct request_queue *, unsigned int);
845extern void blk_queue_flush(struct request_queue *q, unsigned int flush); 848extern void blk_queue_flush(struct request_queue *q, unsigned int flush);
846extern struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev); 849extern struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev);
@@ -862,14 +865,14 @@ struct blk_plug {
862 865
863extern void blk_start_plug(struct blk_plug *); 866extern void blk_start_plug(struct blk_plug *);
864extern void blk_finish_plug(struct blk_plug *); 867extern void blk_finish_plug(struct blk_plug *);
865extern void __blk_flush_plug(struct task_struct *, struct blk_plug *); 868extern void blk_flush_plug_list(struct blk_plug *, bool);
866 869
867static inline void blk_flush_plug(struct task_struct *tsk) 870static 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
875static inline bool blk_needs_flush_plug(struct task_struct *tsk) 878static 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
402DECLARE_EVENT_CLASS(block_unplug, 402DECLARE_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 */
428DEFINE_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 */
442DEFINE_EVENT(block_unplug, block_unplug_io, 429DEFINE_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/**