mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	blk-mq: update hardware and software queues for sleeping alloc
If we end up sleeping due to running out of requests, we should
update the hardware and software queues in the map ctx structure.
Otherwise we could end up having rq->mq_ctx point to the pre-sleep
context, and risk corrupting ctx->rq_list since we'll be
grabbing the wrong lock when inserting the request.
Reported-by: Dave Jones <davej@codemonkey.org.uk>
Reported-by: Chris Mason <clm@fb.com>
Tested-by: Chris Mason <clm@fb.com>
Fixes: 63581af3f3 ("blk-mq: remove non-blocking pass in blk_mq_map_request")
Signed-off-by: Jens Axboe <axboe@fb.com>
			
			
This commit is contained in:
		
							parent
							
								
									94d7dea448
								
							
						
					
					
						commit
						7fe311302f
					
				
					 1 changed files with 3 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -1217,9 +1217,9 @@ static struct request *blk_mq_map_request(struct request_queue *q,
 | 
			
		|||
	blk_mq_set_alloc_data(&alloc_data, q, 0, ctx, hctx);
 | 
			
		||||
	rq = __blk_mq_alloc_request(&alloc_data, op, op_flags);
 | 
			
		||||
 | 
			
		||||
	hctx->queued++;
 | 
			
		||||
	data->hctx = hctx;
 | 
			
		||||
	data->ctx = ctx;
 | 
			
		||||
	data->hctx = alloc_data.hctx;
 | 
			
		||||
	data->ctx = alloc_data.ctx;
 | 
			
		||||
	data->hctx->queued++;
 | 
			
		||||
	return rq;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue