aboutsummaryrefslogtreecommitdiffstats
path: root/block
diff options
context:
space:
mode:
Diffstat (limited to 'block')
-rw-r--r--block/blk-core.c28
-rw-r--r--block/blk-settings.c6
2 files changed, 34 insertions, 0 deletions
diff --git a/block/blk-core.c b/block/blk-core.c
index c66333d8e48d..b2d0ac8b760e 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -2100,6 +2100,34 @@ void blk_rq_bio_prep(struct request_queue *q, struct request *rq,
2100 rq->rq_disk = bio->bi_bdev->bd_disk; 2100 rq->rq_disk = bio->bi_bdev->bd_disk;
2101} 2101}
2102 2102
2103/**
2104 * blk_lld_busy - Check if underlying low-level drivers of a device are busy
2105 * @q : the queue of the device being checked
2106 *
2107 * Description:
2108 * Check if underlying low-level drivers of a device are busy.
2109 * If the drivers want to export their busy state, they must set own
2110 * exporting function using blk_queue_lld_busy() first.
2111 *
2112 * Basically, this function is used only by request stacking drivers
2113 * to stop dispatching requests to underlying devices when underlying
2114 * devices are busy. This behavior helps more I/O merging on the queue
2115 * of the request stacking driver and prevents I/O throughput regression
2116 * on burst I/O load.
2117 *
2118 * Return:
2119 * 0 - Not busy (The request stacking driver should dispatch request)
2120 * 1 - Busy (The request stacking driver should stop dispatching request)
2121 */
2122int blk_lld_busy(struct request_queue *q)
2123{
2124 if (q->lld_busy_fn)
2125 return q->lld_busy_fn(q);
2126
2127 return 0;
2128}
2129EXPORT_SYMBOL_GPL(blk_lld_busy);
2130
2103int kblockd_schedule_work(struct request_queue *q, struct work_struct *work) 2131int kblockd_schedule_work(struct request_queue *q, struct work_struct *work)
2104{ 2132{
2105 return queue_work(kblockd_workqueue, work); 2133 return queue_work(kblockd_workqueue, work);
diff --git a/block/blk-settings.c b/block/blk-settings.c
index 1d0330d0b40a..b21dcdb64151 100644
--- a/block/blk-settings.c
+++ b/block/blk-settings.c
@@ -89,6 +89,12 @@ void blk_queue_rq_timed_out(struct request_queue *q, rq_timed_out_fn *fn)
89} 89}
90EXPORT_SYMBOL_GPL(blk_queue_rq_timed_out); 90EXPORT_SYMBOL_GPL(blk_queue_rq_timed_out);
91 91
92void blk_queue_lld_busy(struct request_queue *q, lld_busy_fn *fn)
93{
94 q->lld_busy_fn = fn;
95}
96EXPORT_SYMBOL_GPL(blk_queue_lld_busy);
97
92/** 98/**
93 * blk_queue_make_request - define an alternate make_request function for a device 99 * blk_queue_make_request - define an alternate make_request function for a device
94 * @q: the request queue for the device to be affected 100 * @q: the request queue for the device to be affected