|
@@ -56,11 +56,6 @@ static kmem_cache_t *requestq_cachep;
|
|
|
*/
|
|
|
static kmem_cache_t *iocontext_cachep;
|
|
|
|
|
|
-static wait_queue_head_t congestion_wqh[2] = {
|
|
|
- __WAIT_QUEUE_HEAD_INITIALIZER(congestion_wqh[0]),
|
|
|
- __WAIT_QUEUE_HEAD_INITIALIZER(congestion_wqh[1])
|
|
|
- };
|
|
|
-
|
|
|
/*
|
|
|
* Controlling structure to kblockd
|
|
|
*/
|
|
@@ -112,37 +107,6 @@ static void blk_queue_congestion_threshold(struct request_queue *q)
|
|
|
q->nr_congestion_off = nr;
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * A queue has just exitted congestion. Note this in the global counter of
|
|
|
- * congested queues, and wake up anyone who was waiting for requests to be
|
|
|
- * put back.
|
|
|
- */
|
|
|
-void blk_clear_queue_congested(request_queue_t *q, int rw)
|
|
|
-{
|
|
|
- enum bdi_state bit;
|
|
|
- wait_queue_head_t *wqh = &congestion_wqh[rw];
|
|
|
-
|
|
|
- bit = (rw == WRITE) ? BDI_write_congested : BDI_read_congested;
|
|
|
- clear_bit(bit, &q->backing_dev_info.state);
|
|
|
- smp_mb__after_clear_bit();
|
|
|
- if (waitqueue_active(wqh))
|
|
|
- wake_up(wqh);
|
|
|
-}
|
|
|
-EXPORT_SYMBOL(blk_clear_queue_congested);
|
|
|
-
|
|
|
-/*
|
|
|
- * A queue has just entered congestion. Flag that in the queue's VM-visible
|
|
|
- * state flags and increment the global gounter of congested queues.
|
|
|
- */
|
|
|
-void blk_set_queue_congested(request_queue_t *q, int rw)
|
|
|
-{
|
|
|
- enum bdi_state bit;
|
|
|
-
|
|
|
- bit = (rw == WRITE) ? BDI_write_congested : BDI_read_congested;
|
|
|
- set_bit(bit, &q->backing_dev_info.state);
|
|
|
-}
|
|
|
-EXPORT_SYMBOL(blk_set_queue_congested);
|
|
|
-
|
|
|
/**
|
|
|
* blk_get_backing_dev_info - get the address of a queue's backing_dev_info
|
|
|
* @bdev: device
|
|
@@ -2755,41 +2719,6 @@ void blk_end_sync_rq(struct request *rq, int error)
|
|
|
}
|
|
|
EXPORT_SYMBOL(blk_end_sync_rq);
|
|
|
|
|
|
-/**
|
|
|
- * blk_congestion_wait - wait for a queue to become uncongested
|
|
|
- * @rw: READ or WRITE
|
|
|
- * @timeout: timeout in jiffies
|
|
|
- *
|
|
|
- * Waits for up to @timeout jiffies for a queue (any queue) to exit congestion.
|
|
|
- * If no queues are congested then just wait for the next request to be
|
|
|
- * returned.
|
|
|
- */
|
|
|
-long blk_congestion_wait(int rw, long timeout)
|
|
|
-{
|
|
|
- long ret;
|
|
|
- DEFINE_WAIT(wait);
|
|
|
- wait_queue_head_t *wqh = &congestion_wqh[rw];
|
|
|
-
|
|
|
- prepare_to_wait(wqh, &wait, TASK_UNINTERRUPTIBLE);
|
|
|
- ret = io_schedule_timeout(timeout);
|
|
|
- finish_wait(wqh, &wait);
|
|
|
- return ret;
|
|
|
-}
|
|
|
-
|
|
|
-EXPORT_SYMBOL(blk_congestion_wait);
|
|
|
-
|
|
|
-/**
|
|
|
- * blk_congestion_end - wake up sleepers on a congestion queue
|
|
|
- * @rw: READ or WRITE
|
|
|
- */
|
|
|
-void blk_congestion_end(int rw)
|
|
|
-{
|
|
|
- wait_queue_head_t *wqh = &congestion_wqh[rw];
|
|
|
-
|
|
|
- if (waitqueue_active(wqh))
|
|
|
- wake_up(wqh);
|
|
|
-}
|
|
|
-
|
|
|
/*
|
|
|
* Has to be called with the request spinlock acquired
|
|
|
*/
|