scsi: core: Only re-run queue in scsi_end_request() if device queue is busy
The request queue is currently run unconditionally in scsi_end_request() if both target queue and host queue are ready. Recently Long Li reported that cost of a queue run can be very heavy in case of high queue depth. Improve this situation by only running the request queue when this LUN is busy. Link: https://lore.kernel.org/r/20200910075056.36509-1-ming.lei@redhat.com Reported-by: Long Li <longli@microsoft.com> Tested-by: Long Li <longli@microsoft.com> Tested-by: Kashyap Desai <kashyap.desai@broadcom.com> Reviewed-by: Bart Van Assche <bvanassche@acm.org> Reviewed-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Ewan D. Milne <emilne@redhat.com> Reviewed-by: John Garry <john.garry@huawei.com> Signed-off-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:

committed by
Martin K. Petersen

parent
f97e6e1eab
commit
ed5dd6a67d
@@ -109,6 +109,7 @@ struct scsi_device {
|
||||
atomic_t device_busy; /* commands actually active on LLDD */
|
||||
atomic_t device_blocked; /* Device returned QUEUE_FULL. */
|
||||
|
||||
atomic_t restarts;
|
||||
spinlock_t list_lock;
|
||||
struct list_head starved_entry;
|
||||
unsigned short queue_depth; /* How deep of a queue we want */
|
||||
|
Reference in New Issue
Block a user