scsi: convert host_busy to atomic_t
Avoid taking the host-wide host_lock to check the per-host queue limit. Instead we do an atomic_inc_return early on to grab our slot in the queue, and if necessary decrement it after finishing all checks. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com> Reviewed-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Webb Scales <webbnh@hp.com> Acked-by: Jens Axboe <axboe@kernel.dk> Tested-by: Bart Van Assche <bvanassche@acm.org> Tested-by: Robert Elliott <elliott@hp.com>
This commit is contained in:
@@ -582,13 +582,9 @@ struct Scsi_Host {
|
||||
*/
|
||||
struct blk_queue_tag *bqt;
|
||||
|
||||
/*
|
||||
* The following two fields are protected with host_lock;
|
||||
* however, eh routines can safely access during eh processing
|
||||
* without acquiring the lock.
|
||||
*/
|
||||
unsigned int host_busy; /* commands actually active on low-level */
|
||||
unsigned int host_failed; /* commands that failed. */
|
||||
atomic_t host_busy; /* commands actually active on low-level */
|
||||
unsigned int host_failed; /* commands that failed.
|
||||
protected by host_lock */
|
||||
unsigned int host_eh_scheduled; /* EH scheduled without command */
|
||||
|
||||
unsigned int host_no; /* Used for IOCTL_GET_IDLUN, /proc/scsi et al. */
|
||||
|
Reference in New Issue
Block a user