diff options
Diffstat (limited to 'block/ll_rw_blk.c')
-rw-r--r-- | block/ll_rw_blk.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/block/ll_rw_blk.c b/block/ll_rw_blk.c index c6dfa889206c..346be9ae31f6 100644 --- a/block/ll_rw_blk.c +++ b/block/ll_rw_blk.c | |||
@@ -2267,6 +2267,25 @@ struct request *blk_get_request(request_queue_t *q, int rw, gfp_t gfp_mask) | |||
2267 | EXPORT_SYMBOL(blk_get_request); | 2267 | EXPORT_SYMBOL(blk_get_request); |
2268 | 2268 | ||
2269 | /** | 2269 | /** |
2270 | * blk_start_queueing - initiate dispatch of requests to device | ||
2271 | * @q: request queue to kick into gear | ||
2272 | * | ||
2273 | * This is basically a helper to remove the need to know whether a queue | ||
2274 | * is plugged or not if someone just wants to initiate dispatch of requests | ||
2275 | * for this queue. | ||
2276 | * | ||
2277 | * The queue lock must be held with interrupts disabled. | ||
2278 | */ | ||
2279 | void blk_start_queueing(request_queue_t *q) | ||
2280 | { | ||
2281 | if (!blk_queue_plugged(q)) | ||
2282 | q->request_fn(q); | ||
2283 | else | ||
2284 | __generic_unplug_device(q); | ||
2285 | } | ||
2286 | EXPORT_SYMBOL(blk_start_queueing); | ||
2287 | |||
2288 | /** | ||
2270 | * blk_requeue_request - put a request back on queue | 2289 | * blk_requeue_request - put a request back on queue |
2271 | * @q: request queue where request should be inserted | 2290 | * @q: request queue where request should be inserted |
2272 | * @rq: request to be inserted | 2291 | * @rq: request to be inserted |
@@ -2333,11 +2352,7 @@ void blk_insert_request(request_queue_t *q, struct request *rq, | |||
2333 | 2352 | ||
2334 | drive_stat_acct(rq, rq->nr_sectors, 1); | 2353 | drive_stat_acct(rq, rq->nr_sectors, 1); |
2335 | __elv_add_request(q, rq, where, 0); | 2354 | __elv_add_request(q, rq, where, 0); |
2336 | 2355 | blk_start_queueing(q); | |
2337 | if (blk_queue_plugged(q)) | ||
2338 | __generic_unplug_device(q); | ||
2339 | else | ||
2340 | q->request_fn(q); | ||
2341 | spin_unlock_irqrestore(q->queue_lock, flags); | 2356 | spin_unlock_irqrestore(q->queue_lock, flags); |
2342 | } | 2357 | } |
2343 | 2358 | ||