@ -1908,40 +1908,40 @@ static struct request *get_request(request_queue_t *q, int rw, struct bio *bio,
{
struct request * rq = NULL ;
struct request_list * rl = & q - > rq ;
struct io_context * ioc = current_io_context ( GFP_ATOMIC ) ;
int priv ;
struct io_context * ioc = NULL ;
int may_queue , priv ;
if ( rl - > count [ rw ] + 1 > = q - > nr_requests ) {
/*
* The queue will fill after this allocation , so set it as
* full , and mark this process as " batching " . This process
* will be allowed to complete a batch of requests , others
* will be blocked .
*/
if ( ! blk_queue_full ( q , rw ) ) {
ioc_set_batching ( q , ioc ) ;
blk_set_queue_full ( q , rw ) ;
}
}
may_queue = elv_may_queue ( q , rw , bio ) ;
if ( may_queue = = ELV_MQUEUE_NO )
goto rq_starved ;
switch ( elv_may_queue ( q , rw , bio ) ) {
case ELV_MQUEUE_NO :
goto rq_starved ;
case ELV_MQUEUE_MAY :
break ;
case ELV_MQUEUE_MUST :
goto get_rq ;
}
if ( blk_queue_full ( q , rw ) & & ! ioc_batching ( q , ioc ) ) {
/*
* The queue is full and the allocating process is not a
* " batcher " , and not exempted by the IO scheduler
*/
goto out ;
if ( rl - > count [ rw ] + 1 > = queue_congestion_on_threshold ( q ) ) {
if ( rl - > count [ rw ] + 1 > = q - > nr_requests ) {
ioc = current_io_context ( GFP_ATOMIC ) ;
/*
* The queue will fill after this allocation , so set
* it as full , and mark this process as " batching " .
* This process will be allowed to complete a batch of
* requests , others will be blocked .
*/
if ( ! blk_queue_full ( q , rw ) ) {
ioc_set_batching ( q , ioc ) ;
blk_set_queue_full ( q , rw ) ;
} else {
if ( may_queue ! = ELV_MQUEUE_MUST
& & ! ioc_batching ( q , ioc ) ) {
/*
* The queue is full and the allocating
* process is not a " batcher " , and not
* exempted by the IO scheduler
*/
goto out ;
}
}
}
set_queue_congested ( q , rw ) ;
}
get_rq :
/*
* Only allow batching queuers to allocate up to 50 % over the defined
* limit of requests , otherwise we could have thousands of requests
@ -1952,8 +1952,6 @@ get_rq:
rl - > count [ rw ] + + ;
rl - > starved [ rw ] = 0 ;
if ( rl - > count [ rw ] > = queue_congestion_on_threshold ( q ) )
set_queue_congested ( q , rw ) ;
priv = ! test_bit ( QUEUE_FLAG_ELVSWITCH , & q - > queue_flags ) ;
if ( priv )
@ -1962,7 +1960,7 @@ get_rq:
spin_unlock_irq ( q - > queue_lock ) ;
rq = blk_alloc_request ( q , rw , bio , priv , gfp_mask ) ;
if ( ! rq ) {
if ( unlikely ( ! rq ) ) {
/*
* Allocation failed presumably due to memory . Undo anything
* we might have messed up .
@ -1987,6 +1985,12 @@ rq_starved:
goto out ;
}
/*
* ioc may be NULL here , and ioc_batching will be false . That ' s
* OK , if the queue is under the request limit then requests need
* not count toward the nr_batch_requests limit . There will always
* be some limit enforced by BLK_BATCH_TIME .
*/
if ( ioc_batching ( q , ioc ) )
ioc - > nr_batch_requests - - ;