--- linux-4.9.37/drivers/scsi/scsi_lib.c 2017-07-12 16:42:41.000000000 +0300 +++ linux-4.9.y/drivers/scsi/scsi_lib.c 2021-06-07 13:01:34.000000000 +0300 @@ -1420,7 +1420,7 @@ if (scsi_host_in_recovery(shost)) return 0; - busy = atomic_inc_return(&shost->host_busy) - 1; + busy = atomic_read(&shost->host_busy); if (atomic_read(&shost->host_blocked) > 0) { if (busy) goto starved; @@ -1429,7 +1429,7 @@ * unblock after host_blocked iterates to zero */ if (atomic_dec_return(&shost->host_blocked) > 0) - goto out_dec; + goto out; SCSI_LOG_MLQUEUE(3, shost_printk(KERN_INFO, shost, @@ -1449,6 +1449,7 @@ spin_unlock_irq(shost->host_lock); } + atomic_inc(&shost->host_busy); return 1; starved: @@ -1456,8 +1457,7 @@ if (list_empty(&sdev->starved_entry)) list_add_tail(&sdev->starved_entry, &shost->starved_list); spin_unlock_irq(shost->host_lock); -out_dec: - atomic_dec(&shost->host_busy); +out: return 0; }