These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / scsi / scsi_scan.c
index 6efab1c..054923e 100644 (file)
@@ -55,6 +55,7 @@
  * Default timeout
  */
 #define SCSI_TIMEOUT (2*HZ)
+#define SCSI_REPORT_LUNS_TIMEOUT (30*HZ)
 
 /*
  * Prefix values for the SCSI id's (stored in sysfs name field)
@@ -274,13 +275,13 @@ static struct scsi_device *scsi_alloc_sdev(struct scsi_target *starget,
        WARN_ON_ONCE(!blk_get_queue(sdev->request_queue));
        sdev->request_queue->queuedata = sdev;
 
-       if (!shost_use_blk_mq(sdev->host) &&
-           (shost->bqt || shost->hostt->use_blk_tags)) {
+       if (!shost_use_blk_mq(sdev->host)) {
                blk_queue_init_tags(sdev->request_queue,
                                    sdev->host->cmd_per_lun, shost->bqt,
                                    shost->hostt->tag_alloc_policy);
        }
-       scsi_change_queue_depth(sdev, sdev->host->cmd_per_lun);
+       scsi_change_queue_depth(sdev, sdev->host->cmd_per_lun ?
+                                       sdev->host->cmd_per_lun : 1);
 
        scsi_sysfs_device_initialize(sdev);
 
@@ -700,9 +701,12 @@ static int scsi_probe_lun(struct scsi_device *sdev, unsigned char *inq_result,
         * strings.
         */
        if (sdev->inquiry_len < 36) {
-               sdev_printk(KERN_INFO, sdev,
-                           "scsi scan: INQUIRY result too short (%d),"
-                           " using 36\n", sdev->inquiry_len);
+               if (!sdev->host->short_inquiry) {
+                       shost_printk(KERN_INFO, sdev->host,
+                                   "scsi scan: INQUIRY result too short (%d),"
+                                   " using 36\n", sdev->inquiry_len);
+                       sdev->host->short_inquiry = 1;
+               }
                sdev->inquiry_len = 36;
        }
 
@@ -1268,68 +1272,6 @@ static void scsi_sequential_lun_scan(struct scsi_target *starget,
                        return;
 }
 
-/**
- * scsilun_to_int - convert a scsi_lun to an int
- * @scsilun:   struct scsi_lun to be converted.
- *
- * Description:
- *     Convert @scsilun from a struct scsi_lun to a four byte host byte-ordered
- *     integer, and return the result. The caller must check for
- *     truncation before using this function.
- *
- * Notes:
- *     For a description of the LUN format, post SCSI-3 see the SCSI
- *     Architecture Model, for SCSI-3 see the SCSI Controller Commands.
- *
- *     Given a struct scsi_lun of: d2 04 0b 03 00 00 00 00, this function
- *     returns the integer: 0x0b03d204
- *
- *     This encoding will return a standard integer LUN for LUNs smaller
- *     than 256, which typically use a single level LUN structure with
- *     addressing method 0.
- **/
-u64 scsilun_to_int(struct scsi_lun *scsilun)
-{
-       int i;
-       u64 lun;
-
-       lun = 0;
-       for (i = 0; i < sizeof(lun); i += 2)
-               lun = lun | (((u64)scsilun->scsi_lun[i] << ((i + 1) * 8)) |
-                            ((u64)scsilun->scsi_lun[i + 1] << (i * 8)));
-       return lun;
-}
-EXPORT_SYMBOL(scsilun_to_int);
-
-/**
- * int_to_scsilun - reverts an int into a scsi_lun
- * @lun:        integer to be reverted
- * @scsilun:   struct scsi_lun to be set.
- *
- * Description:
- *     Reverts the functionality of the scsilun_to_int, which packed
- *     an 8-byte lun value into an int. This routine unpacks the int
- *     back into the lun value.
- *
- * Notes:
- *     Given an integer : 0x0b03d204,  this function returns a
- *     struct scsi_lun of: d2 04 0b 03 00 00 00 00
- *
- **/
-void int_to_scsilun(u64 lun, struct scsi_lun *scsilun)
-{
-       int i;
-
-       memset(scsilun->scsi_lun, 0, sizeof(scsilun->scsi_lun));
-
-       for (i = 0; i < sizeof(lun); i += 2) {
-               scsilun->scsi_lun[i] = (lun >> 8) & 0xFF;
-               scsilun->scsi_lun[i+1] = lun & 0xFF;
-               lun = lun >> 16;
-       }
-}
-EXPORT_SYMBOL(int_to_scsilun);
-
 /**
  * scsi_report_lun_scan - Scan using SCSI REPORT LUN results
  * @starget: which target
@@ -1444,7 +1386,7 @@ retry:
 
                result = scsi_execute_req(sdev, scsi_cmd, DMA_FROM_DEVICE,
                                          lun_data, length, &sshdr,
-                                         SCSI_TIMEOUT + 4 * HZ, 3, NULL);
+                                         SCSI_REPORT_LUNS_TIMEOUT, 3, NULL);
 
                SCSI_LOG_SCAN_BUS(3, sdev_printk (KERN_INFO, sdev,
                                "scsi scan: REPORT LUNS"
@@ -1773,8 +1715,7 @@ static struct async_scan_data *scsi_prep_async_scan(struct Scsi_Host *shost)
                return NULL;
 
        if (shost->async_scan) {
-               shost_printk(KERN_INFO, shost, "%s called twice\n", __func__);
-               dump_stack();
+               shost_printk(KERN_DEBUG, shost, "%s called twice\n", __func__);
                return NULL;
        }