scsi: core: Clean up scsi_dev_queue_ready()
authorWenchao Hao <haowenchao2@huawei.com>
Wed, 18 Oct 2023 11:37:45 +0000 (19:37 +0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 25 Oct 2023 02:31:04 +0000 (22:31 -0400)
This is just a cleanup for scsi_dev_queue_ready() to avoid a redundant goto
and if statement. No functional change.

Signed-off-by: Wenchao Hao <haowenchao2@huawei.com>
Link: https://lore.kernel.org/r/20231018113746.1940197-2-haowenchao2@huawei.com
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/scsi_lib.c

index aca57c3ab626e441d0ca622a6b3baff01fbda2bd..cf3864f720930988fbadc77b3c91c77fe2d3bb62 100644 (file)
@@ -1251,28 +1251,26 @@ static inline int scsi_dev_queue_ready(struct request_queue *q,
        int token;
 
        token = sbitmap_get(&sdev->budget_map);
-       if (atomic_read(&sdev->device_blocked)) {
-               if (token < 0)
-                       goto out;
+       if (token < 0)
+               return -1;
 
-               if (scsi_device_busy(sdev) > 1)
-                       goto out_dec;
+       if (!atomic_read(&sdev->device_blocked))
+               return token;
 
-               /*
-                * unblock after device_blocked iterates to zero
-                */
-               if (atomic_dec_return(&sdev->device_blocked) > 0)
-                       goto out_dec;
-               SCSI_LOG_MLQUEUE(3, sdev_printk(KERN_INFO, sdev,
-                                  "unblocking device at zero depth\n"));
+       /*
+        * Only unblock if no other commands are pending and
+        * if device_blocked has decreased to zero
+        */
+       if (scsi_device_busy(sdev) > 1 ||
+           atomic_dec_return(&sdev->device_blocked) > 0) {
+               sbitmap_put(&sdev->budget_map, token);
+               return -1;
        }
 
+       SCSI_LOG_MLQUEUE(3, sdev_printk(KERN_INFO, sdev,
+                        "unblocking device at zero depth\n"));
+
        return token;
-out_dec:
-       if (token >= 0)
-               sbitmap_put(&sdev->budget_map, token);
-out:
-       return -1;
 }
 
 /*