OSDN Git Service

scsi: core: Add scsi_device_busy() wrapper
authorMing Lei <ming.lei@redhat.com>
Fri, 22 Jan 2021 02:33:15 +0000 (10:33 +0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 4 Mar 2021 22:37:00 +0000 (17:37 -0500)
Add scsi_device_busy() helper to prepare drivers for tracking device queue
depth via sbitmap_queue.

Link: https://lore.kernel.org/r/20210122023317.687987-12-ming.lei@redhat.com
Cc: Omar Sandoval <osandov@fb.com>
Cc: Kashyap Desai <kashyap.desai@broadcom.com>
Cc: Sumanesh Samanta <sumanesh.samanta@broadcom.com>
Cc: Ewan D. Milne <emilne@redhat.com>
Tested-by: Sumanesh Samanta <sumanesh.samanta@broadcom.com>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/message/fusion/mptsas.c
drivers/scsi/mpt3sas/mpt3sas_scsih.c
drivers/scsi/scsi_lib.c
drivers/scsi/scsi_sysfs.c
drivers/scsi/sg.c
include/scsi/scsi_device.h

index 5eb0b33..85aa578 100644 (file)
@@ -3781,7 +3781,7 @@ mptsas_send_link_status_event(struct fw_event_work *fw_event)
                                                printk(MYIOC_s_DEBUG_FMT
                                                "SDEV OUTSTANDING CMDS"
                                                "%d\n", ioc->name,
-                                               atomic_read(&sdev->device_busy)));
+                                               scsi_device_busy(sdev)));
                                }
 
                        }
index ffca030..7bd0a57 100644 (file)
@@ -3423,7 +3423,7 @@ scsih_dev_reset(struct scsi_cmnd *scmd)
                MPI2_SCSITASKMGMT_TASKTYPE_LOGICAL_UNIT_RESET, 0, 0,
                tr_timeout, tr_method);
        /* Check for busy commands after reset */
-       if (r == SUCCESS && atomic_read(&scmd->device->device_busy))
+       if (r == SUCCESS && scsi_device_busy(scmd->device))
                r = FAILED;
  out:
        sdev_printk(KERN_INFO, scmd->device, "device reset: %s scmd(0x%p)\n",
index dae9f66..2f8578f 100644 (file)
@@ -385,7 +385,7 @@ static void scsi_single_lun_run(struct scsi_device *current_sdev)
 
 static inline bool scsi_device_is_busy(struct scsi_device *sdev)
 {
-       if (atomic_read(&sdev->device_busy) >= sdev->queue_depth)
+       if (scsi_device_busy(sdev) >= sdev->queue_depth)
                return true;
        if (atomic_read(&sdev->device_blocked) > 0)
                return true;
@@ -1639,7 +1639,7 @@ static int scsi_mq_get_budget(struct request_queue *q)
         * the .restarts flag, and the request queue will be run for handling
         * this request, see scsi_end_request().
         */
-       if (unlikely(atomic_read(&sdev->device_busy) == 0 &&
+       if (unlikely(scsi_device_busy(sdev) == 0 &&
                                !scsi_device_blocked(sdev)))
                blk_mq_delay_run_hw_queues(sdev->request_queue, SCSI_QUEUE_DELAY);
        return -1;
index b6378c8..0840e44 100644 (file)
@@ -670,7 +670,7 @@ sdev_show_device_busy(struct device *dev, struct device_attribute *attr,
                char *buf)
 {
        struct scsi_device *sdev = to_scsi_device(dev);
-       return snprintf(buf, 20, "%d\n", atomic_read(&sdev->device_busy));
+       return snprintf(buf, 20, "%d\n", scsi_device_busy(sdev));
 }
 static DEVICE_ATTR(device_busy, S_IRUGO, sdev_show_device_busy, NULL);
 
index 4383d93..737cea9 100644 (file)
@@ -2503,7 +2503,7 @@ static int sg_proc_seq_show_dev(struct seq_file *s, void *v)
                              scsidp->id, scsidp->lun, (int) scsidp->type,
                              1,
                              (int) scsidp->queue_depth,
-                             (int) atomic_read(&scsidp->device_busy),
+                             (int) scsi_device_busy(scsidp),
                              (int) scsi_device_online(scsidp));
        }
        read_unlock_irqrestore(&sg_index_lock, iflags);
index 1a5c9a3..dd0b9f6 100644 (file)
@@ -590,6 +590,11 @@ static inline int scsi_device_supports_vpd(struct scsi_device *sdev)
        return 0;
 }
 
+static inline int scsi_device_busy(struct scsi_device *sdev)
+{
+       return atomic_read(&sdev->device_busy);
+}
+
 #define MODULE_ALIAS_SCSI_DEVICE(type) \
        MODULE_ALIAS("scsi:t-" __stringify(type) "*")
 #define SCSI_DEVICE_MODALIAS_FMT "scsi:t-0x%02x"