On 8/17/20 12:08 PM, Ming Lei wrote:
Now the request queue is run in scsi_end_request() unconditionally if both target queue and host queue is ready. We should have re-run request queue only after this device queue becomes busy for restarting this LUN only. Recently Long Li reported that cost of run queue may be very heavy in case of high queue depth. So improve this situation by only running the request queue when this LUN is busy. Cc: Ewan D. Milne <emilne@xxxxxxxxxx> Cc: Kashyap Desai <kashyap.desai@xxxxxxxxxxxx> Cc: Hannes Reinecke <hare@xxxxxxx> Cc: Bart Van Assche <bvanassche@xxxxxxx> Cc: Long Li <longli@xxxxxxxxxxxxx> Cc: John Garry <john.garry@xxxxxxxxxx> Cc: linux-block@xxxxxxxxxxxxxxx Reported-by: Long Li <longli@xxxxxxxxxxxxx> Tested-by: Kashyap Desai <kashyap.desai@xxxxxxxxxxxx> Signed-off-by: Ming Lei <ming.lei@xxxxxxxxxx> --- V4: - fix one race reported by Kashyap, and simplify the implementation a bit; also pass Kashyap's both function and performance test V3: - add one smp_mb() in scsi_mq_get_budget() and comment V2: - commit log change, no any code change - add reported-by tag drivers/scsi/scsi_lib.c | 51 +++++++++++++++++++++++++++++++++++--- include/scsi/scsi_device.h | 1 + 2 files changed, 49 insertions(+), 3 deletions(-)
Reviewed-by: Hannes Reinecke <hare@xxxxxxx> Cheers, Hannes -- Dr. Hannes Reinecke Kernel Storage Architect hare@xxxxxxx +49 911 74053 688 SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg HRB 36809 (AG Nürnberg), Geschäftsführer: Felix Imendörffer