|
@@ -1010,54 +1010,6 @@ static void add_acct_request(struct request_queue *q, struct request *rq,
|
|
|
__elv_add_request(q, rq, where);
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * blk_insert_request - insert a special request into a request queue
|
|
|
- * @q: request queue where request should be inserted
|
|
|
- * @rq: request to be inserted
|
|
|
- * @at_head: insert request at head or tail of queue
|
|
|
- * @data: private data
|
|
|
- *
|
|
|
- * Description:
|
|
|
- * Many block devices need to execute commands asynchronously, so they don't
|
|
|
- * block the whole kernel from preemption during request execution. This is
|
|
|
- * accomplished normally by inserting aritficial requests tagged as
|
|
|
- * REQ_TYPE_SPECIAL in to the corresponding request queue, and letting them
|
|
|
- * be scheduled for actual execution by the request queue.
|
|
|
- *
|
|
|
- * We have the option of inserting the head or the tail of the queue.
|
|
|
- * Typically we use the tail for new ioctls and so forth. We use the head
|
|
|
- * of the queue for things like a QUEUE_FULL message from a device, or a
|
|
|
- * host that is unable to accept a particular command.
|
|
|
- */
|
|
|
-void blk_insert_request(struct request_queue *q, struct request *rq,
|
|
|
- int at_head, void *data)
|
|
|
-{
|
|
|
- int where = at_head ? ELEVATOR_INSERT_FRONT : ELEVATOR_INSERT_BACK;
|
|
|
- unsigned long flags;
|
|
|
-
|
|
|
- /*
|
|
|
- * tell I/O scheduler that this isn't a regular read/write (ie it
|
|
|
- * must not attempt merges on this) and that it acts as a soft
|
|
|
- * barrier
|
|
|
- */
|
|
|
- rq->cmd_type = REQ_TYPE_SPECIAL;
|
|
|
-
|
|
|
- rq->special = data;
|
|
|
-
|
|
|
- spin_lock_irqsave(q->queue_lock, flags);
|
|
|
-
|
|
|
- /*
|
|
|
- * If command is tagged, release the tag
|
|
|
- */
|
|
|
- if (blk_rq_tagged(rq))
|
|
|
- blk_queue_end_tag(q, rq);
|
|
|
-
|
|
|
- add_acct_request(q, rq, where);
|
|
|
- __blk_run_queue(q);
|
|
|
- spin_unlock_irqrestore(q->queue_lock, flags);
|
|
|
-}
|
|
|
-EXPORT_SYMBOL(blk_insert_request);
|
|
|
-
|
|
|
static void part_round_stats_single(int cpu, struct hd_struct *part,
|
|
|
unsigned long now)
|
|
|
{
|