scsi: drop reason argument from ->change_queue_depth
[firefly-linux-kernel-4.4.55.git] / drivers / scsi / scsi.c
index 22c449e926fa9197ab0da4bbd4f1b32c4f148049..5ea15fc7d2fb91f9e4663e4946a15897a1b48e27 100644 (file)
@@ -742,32 +742,18 @@ void scsi_finish_command(struct scsi_cmnd *cmd)
 }
 
 /**
- * scsi_adjust_queue_depth - Let low level drivers change a device's queue depth
+ * scsi_change_queue_depth - change a device's queue depth
  * @sdev: SCSI Device in question
- * @tagged: Do we use tagged queueing (non-0) or do we treat
- *          this device as an untagged device (0)
- * @tags: Number of tags allowed if tagged queueing enabled,
- *        or number of commands the low level driver can
- *        queue up in non-tagged mode (as per cmd_per_lun).
+ * @depth: number of commands allowed to be queued to the driver
  *
- * Returns:    Nothing
- *
- * Lock Status:        None held on entry
- *
- * Notes:      Low level drivers may call this at any time and we will do
- *             the right thing depending on whether or not the device is
- *             currently active and whether or not it even has the
- *             command blocks built yet.
+ * Sets the device queue depth and returns the new value.
  */
-void scsi_adjust_queue_depth(struct scsi_device *sdev, int tagged, int tags)
+int scsi_change_queue_depth(struct scsi_device *sdev, int depth)
 {
        unsigned long flags;
 
-       /*
-        * refuse to set tagged depth to an unworkable size
-        */
-       if (tags <= 0)
-               return;
+       if (depth <= 0)
+               goto out;
 
        spin_lock_irqsave(sdev->request_queue->queue_lock, flags);
 
@@ -782,29 +768,17 @@ void scsi_adjust_queue_depth(struct scsi_device *sdev, int tagged, int tags)
         */
        if (!shost_use_blk_mq(sdev->host) && !sdev->host->bqt) {
                if (blk_queue_tagged(sdev->request_queue) &&
-                   blk_queue_resize_tags(sdev->request_queue, tags) != 0)
-                       goto out;
+                   blk_queue_resize_tags(sdev->request_queue, depth) != 0)
+                       goto out_unlock;
        }
 
-       sdev->queue_depth = tags;
-       switch (tagged) {
-               case 0:
-                       sdev->simple_tags = 0;
-                       break;
-               case MSG_ORDERED_TAG:
-               case MSG_SIMPLE_TAG:
-                       sdev->simple_tags = 1;
-                       break;
-               default:
-                       sdev->simple_tags = 0;
-                       sdev_printk(KERN_WARNING, sdev,
-                                   "scsi_adjust_queue_depth, bad queue type, "
-                                   "disabled\n");
-       }
- out:
+       sdev->queue_depth = depth;
+out_unlock:
        spin_unlock_irqrestore(sdev->request_queue->queue_lock, flags);
+out:
+       return sdev->queue_depth;
 }
-EXPORT_SYMBOL(scsi_adjust_queue_depth);
+EXPORT_SYMBOL(scsi_change_queue_depth);
 
 /**
  * scsi_track_queue_full - track QUEUE_FULL events to adjust queue depth
@@ -848,12 +822,12 @@ int scsi_track_queue_full(struct scsi_device *sdev, int depth)
                return 0;
        if (sdev->last_queue_full_depth < 8) {
                /* Drop back to untagged */
-               scsi_adjust_queue_depth(sdev, 0, sdev->host->cmd_per_lun);
+               scsi_set_tag_type(sdev, 0);
+               scsi_change_queue_depth(sdev, sdev->host->cmd_per_lun);
                return -1;
        }
 
-       scsi_adjust_queue_depth(sdev, MSG_SIMPLE_TAG, depth);
-       return depth;
+       return scsi_change_queue_depth(sdev, depth);
 }
 EXPORT_SYMBOL(scsi_track_queue_full);
 
@@ -864,16 +838,12 @@ EXPORT_SYMBOL(scsi_track_queue_full);
  */
 int scsi_change_queue_type(struct scsi_device *sdev, int tag_type)
 {
-       if (sdev->tagged_supported) {
-               scsi_set_tag_type(sdev, tag_type);
-               if (tag_type)
-                       scsi_activate_tcq(sdev, sdev->queue_depth);
-               else
-                       scsi_deactivate_tcq(sdev, sdev->queue_depth);
-       } else
-               tag_type = 0;
+       if (!sdev->tagged_supported)
+               return 0;
 
+       scsi_set_tag_type(sdev, tag_type);
        return tag_type;
+
 }
 EXPORT_SYMBOL(scsi_change_queue_type);