scsi: fnic: added timestamp reporting in fnic debug stats
[linux-2.6-microblaze.git] / drivers / scsi / scsi_scan.c
index 6f7128f..3c44032 100644 (file)
@@ -231,6 +231,7 @@ static struct scsi_device *scsi_alloc_sdev(struct scsi_target *starget,
        sdev->id = starget->id;
        sdev->lun = lun;
        sdev->channel = starget->channel;
+       mutex_init(&sdev->state_mutex);
        sdev->sdev_state = SDEV_CREATED;
        INIT_LIST_HEAD(&sdev->siblings);
        INIT_LIST_HEAD(&sdev->same_target_siblings);
@@ -655,8 +656,6 @@ static int scsi_probe_lun(struct scsi_device *sdev, unsigned char *inq_result,
                if (pass == 1) {
                        if (BLIST_INQUIRY_36 & *bflags)
                                next_inquiry_len = 36;
-                       else if (BLIST_INQUIRY_58 & *bflags)
-                               next_inquiry_len = 58;
                        else if (sdev->inquiry_len)
                                next_inquiry_len = sdev->inquiry_len;
                        else
@@ -926,15 +925,6 @@ static int scsi_add_lun(struct scsi_device *sdev, unsigned char *inq_result,
 
        sdev->use_10_for_rw = 1;
 
-       if (*bflags & BLIST_MS_SKIP_PAGE_08)
-               sdev->skip_ms_page_8 = 1;
-
-       if (*bflags & BLIST_MS_SKIP_PAGE_3F)
-               sdev->skip_ms_page_3f = 1;
-
-       if (*bflags & BLIST_USE_10_BYTE_MS)
-               sdev->use_10_for_ms = 1;
-
        /* some devices don't like REPORT SUPPORTED OPERATION CODES
         * and will simply timeout causing sd_mod init to take a very
         * very long time */
@@ -943,21 +933,19 @@ static int scsi_add_lun(struct scsi_device *sdev, unsigned char *inq_result,
 
        /* set the device running here so that slave configure
         * may do I/O */
+       mutex_lock(&sdev->state_mutex);
        ret = scsi_device_set_state(sdev, SDEV_RUNNING);
-       if (ret) {
+       if (ret)
                ret = scsi_device_set_state(sdev, SDEV_BLOCK);
+       mutex_unlock(&sdev->state_mutex);
 
-               if (ret) {
-                       sdev_printk(KERN_ERR, sdev,
-                                   "in wrong state %s to complete scan\n",
-                                   scsi_device_state_name(sdev->sdev_state));
-                       return SCSI_SCAN_NO_RESPONSE;
-               }
+       if (ret) {
+               sdev_printk(KERN_ERR, sdev,
+                           "in wrong state %s to complete scan\n",
+                           scsi_device_state_name(sdev->sdev_state));
+               return SCSI_SCAN_NO_RESPONSE;
        }
 
-       if (*bflags & BLIST_MS_192_BYTES_FOR_3F)
-               sdev->use_192_bytes_for_3f = 1;
-
        if (*bflags & BLIST_NOT_LOCKABLE)
                sdev->lockable = 0;
 
@@ -967,9 +955,6 @@ static int scsi_add_lun(struct scsi_device *sdev, unsigned char *inq_result,
        if (*bflags & BLIST_NO_DIF)
                sdev->no_dif = 1;
 
-       if (*bflags & BLIST_SYNC_ALUA)
-               sdev->synchronous_alua = 1;
-
        sdev->eh_timeout = SCSI_DEFAULT_EH_TIMEOUT;
 
        if (*bflags & BLIST_TRY_VPD_PAGES)
@@ -1107,7 +1092,7 @@ static int scsi_probe_and_add_lun(struct scsi_target *starget,
        /*
         * result contains valid SCSI INQUIRY data.
         */
-       if (((result[0] >> 5) == 3) && !(bflags & BLIST_ATTACH_PQ3)) {
+       if ((result[0] >> 5) == 3) {
                /*
                 * For a Peripheral qualifier 3 (011b), the SCSI
                 * spec says: The device server is not capable of
@@ -1265,11 +1250,7 @@ static void scsi_sequential_lun_scan(struct scsi_target *starget,
         */
        if (scsi_level < SCSI_3 && !(bflags & BLIST_LARGELUN))
                max_dev_lun = min(8U, max_dev_lun);
-
-       /*
-        * Stop scanning at 255 unless BLIST_SCSI3LUN
-        */
-       if (!(bflags & BLIST_SCSI3LUN))
+       else
                max_dev_lun = min(256U, max_dev_lun);
 
        /*