Merge remote-tracking branch 'net/master'
[linux-2.6-microblaze.git] / drivers / scsi / scsi_devinfo.c
index dd107dc..c4cbfd0 100644 (file)
@@ -161,15 +161,16 @@ static struct {
        {"DGC", "RAID", NULL, BLIST_SPARSELUN}, /* EMC CLARiiON, storage on LUN 0 */
        {"DGC", "DISK", NULL, BLIST_SPARSELUN}, /* EMC CLARiiON, no storage on LUN 0 */
        {"EMC",  "Invista", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
-       {"EMC", "SYMMETRIX", NULL, BLIST_SPARSELUN | BLIST_LARGELUN | BLIST_REPORTLUN2},
+       {"EMC", "SYMMETRIX", NULL, BLIST_SPARSELUN | BLIST_LARGELUN |
+        BLIST_REPORTLUN2 | BLIST_RETRY_ITF},
        {"EMULEX", "MD21/S2     ESDI", NULL, BLIST_SINGLELUN},
        {"easyRAID", "16P", NULL, BLIST_NOREPORTLUN},
        {"easyRAID", "X6P", NULL, BLIST_NOREPORTLUN},
        {"easyRAID", "F8", NULL, BLIST_NOREPORTLUN},
        {"FSC", "CentricStor", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
+       {"FUJITSU", "ETERNUS_DXM", "*", BLIST_RETRY_ASC_C1},
        {"Generic", "USB SD Reader", "1.00", BLIST_FORCELUN | BLIST_INQUIRY_36},
-       {"Generic", "USB Storage-SMC", "0180", BLIST_FORCELUN | BLIST_INQUIRY_36},
-       {"Generic", "USB Storage-SMC", "0207", BLIST_FORCELUN | BLIST_INQUIRY_36},
+       {"Generic", "USB Storage-SMC", NULL, BLIST_FORCELUN | BLIST_INQUIRY_36}, /* FW: 0180 and 0207 */
        {"HITACHI", "DF400", "*", BLIST_REPORTLUN2},
        {"HITACHI", "DF500", "*", BLIST_REPORTLUN2},
        {"HITACHI", "DISK-SUBSYSTEM", "*", BLIST_REPORTLUN2},
@@ -361,8 +362,22 @@ int scsi_dev_info_list_add_keyed(int compatible, char *vendor, char *model,
        scsi_strcpy_devinfo("model", devinfo->model, sizeof(devinfo->model),
                            model, compatible);
 
-       if (strflags)
-               flags = (__force blist_flags_t)simple_strtoul(strflags, NULL, 0);
+       if (strflags) {
+               unsigned long long val;
+               int ret = kstrtoull(strflags, 0, &val);
+
+               if (ret != 0) {
+                       kfree(devinfo);
+                       return ret;
+               }
+               flags = (__force blist_flags_t)val;
+       }
+       if (flags & __BLIST_UNUSED_MASK) {
+               pr_err("scsi_devinfo (%s:%s): unsupported flags 0x%llx",
+                      vendor, model, flags & __BLIST_UNUSED_MASK);
+               kfree(devinfo);
+               return -EINVAL;
+       }
        devinfo->flags = flags;
        devinfo->compatible = compatible;
 
@@ -615,7 +630,7 @@ static int devinfo_seq_show(struct seq_file *m, void *v)
            devinfo_table->name)
                seq_printf(m, "[%s]:\n", devinfo_table->name);
 
-       seq_printf(m, "'%.8s' '%.16s' 0x%x\n",
+       seq_printf(m, "'%.8s' '%.16s' 0x%llx\n",
                   devinfo->vendor, devinfo->model, devinfo->flags);
        return 0;
 }
@@ -734,9 +749,9 @@ MODULE_PARM_DESC(dev_flags,
         " list entries for vendor and model with an integer value of flags"
         " to the scsi device info list");
 
-module_param_named(default_dev_flags, scsi_default_dev_flags, int, S_IRUGO|S_IWUSR);
+module_param_named(default_dev_flags, scsi_default_dev_flags, ullong, 0644);
 MODULE_PARM_DESC(default_dev_flags,
-                "scsi default device flag integer value");
+                "scsi default device flag uint64_t value");
 
 /**
  * scsi_exit_devinfo - remove /proc/scsi/device_info & the scsi_dev_info_list