Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi

Pull SCSI fixes from James Bottomley:
"Five small fixes, four in driver and one in the SCSI Parallel
transport, which fixes an incredibly old bug so I suspect no-one has
actually used the functionality it fixes"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
scsi: dh: Add Fujitsu device to devinfo and dh lists
scsi: mpt3sas: Fix error returns in BRM_status_show
scsi: mpt3sas: Fix unlock imbalance
scsi: iscsi: Change iSCSI workqueue max_active back to 1
scsi: scsi_transport_spi: Fix function pointer check

+1 -1
drivers/scsi/libiscsi.c
··· 2629 2629 "iscsi_q_%d", shost->host_no); 2630 2630 ihost->workq = alloc_workqueue("%s", 2631 2631 WQ_SYSFS | __WQ_LEGACY | WQ_MEM_RECLAIM | WQ_UNBOUND, 2632 - 2, ihost->workq_name); 2632 + 1, ihost->workq_name); 2633 2633 if (!ihost->workq) 2634 2634 goto free_host; 2635 2635 }
+7 -5
drivers/scsi/mpt3sas/mpt3sas_ctl.c
··· 3145 3145 if (!ioc->is_warpdrive) { 3146 3146 ioc_err(ioc, "%s: BRM attribute is only for warpdrive\n", 3147 3147 __func__); 3148 - goto out; 3148 + return 0; 3149 3149 } 3150 3150 /* pci_access_mutex lock acquired by sysfs show path */ 3151 3151 mutex_lock(&ioc->pci_access_mutex); 3152 - if (ioc->pci_error_recovery || ioc->remove_host) { 3153 - mutex_unlock(&ioc->pci_access_mutex); 3154 - return 0; 3155 - } 3152 + if (ioc->pci_error_recovery || ioc->remove_host) 3153 + goto out; 3156 3154 3157 3155 /* allocate upto GPIOVal 36 entries */ 3158 3156 sz = offsetof(Mpi2IOUnitPage3_t, GPIOVal) + (sizeof(u16) * 36); 3159 3157 io_unit_pg3 = kzalloc(sz, GFP_KERNEL); 3160 3158 if (!io_unit_pg3) { 3159 + rc = -ENOMEM; 3161 3160 ioc_err(ioc, "%s: failed allocating memory for iounit_pg3: (%d) bytes\n", 3162 3161 __func__, sz); 3163 3162 goto out; ··· 3166 3167 0) { 3167 3168 ioc_err(ioc, "%s: failed reading iounit_pg3\n", 3168 3169 __func__); 3170 + rc = -EINVAL; 3169 3171 goto out; 3170 3172 } 3171 3173 ··· 3174 3174 if (ioc_status != MPI2_IOCSTATUS_SUCCESS) { 3175 3175 ioc_err(ioc, "%s: iounit_pg3 failed with ioc_status(0x%04x)\n", 3176 3176 __func__, ioc_status); 3177 + rc = -EINVAL; 3177 3178 goto out; 3178 3179 } 3179 3180 3180 3181 if (io_unit_pg3->GPIOCount < 25) { 3181 3182 ioc_err(ioc, "%s: iounit_pg3->GPIOCount less than 25 entries, detected (%d) entries\n", 3182 3183 __func__, io_unit_pg3->GPIOCount); 3184 + rc = -EINVAL; 3183 3185 goto out; 3184 3186 } 3185 3187
+1
drivers/scsi/scsi_devinfo.c
··· 239 239 {"LSI", "Universal Xport", "*", BLIST_NO_ULD_ATTACH}, 240 240 {"ENGENIO", "Universal Xport", "*", BLIST_NO_ULD_ATTACH}, 241 241 {"LENOVO", "Universal Xport", "*", BLIST_NO_ULD_ATTACH}, 242 + {"FUJITSU", "Universal Xport", "*", BLIST_NO_ULD_ATTACH}, 242 243 {"SanDisk", "Cruzer Blade", NULL, BLIST_TRY_VPD_PAGES | 243 244 BLIST_INQUIRY_36}, 244 245 {"SMSC", "USB 2 HS-CF", NULL, BLIST_SPARSELUN | BLIST_INQUIRY_36},
+1
drivers/scsi/scsi_dh.c
··· 63 63 {"LSI", "INF-01-00", "rdac", }, 64 64 {"ENGENIO", "INF-01-00", "rdac", }, 65 65 {"LENOVO", "DE_Series", "rdac", }, 66 + {"FUJITSU", "ETERNUS_AHB", "rdac", }, 66 67 {NULL, NULL, NULL }, 67 68 }; 68 69
+1 -1
drivers/scsi/scsi_transport_iscsi.c
··· 4760 4760 4761 4761 iscsi_eh_timer_workq = alloc_workqueue("%s", 4762 4762 WQ_SYSFS | __WQ_LEGACY | WQ_MEM_RECLAIM | WQ_UNBOUND, 4763 - 2, "iscsi_eh"); 4763 + 1, "iscsi_eh"); 4764 4764 if (!iscsi_eh_timer_workq) { 4765 4765 err = -ENOMEM; 4766 4766 goto release_nls;
+1 -1
drivers/scsi/scsi_transport_spi.c
··· 339 339 struct spi_transport_attrs *tp \ 340 340 = (struct spi_transport_attrs *)&starget->starget_data; \ 341 341 \ 342 - if (i->f->set_##field) \ 342 + if (!i->f->set_##field) \ 343 343 return -EINVAL; \ 344 344 val = simple_strtoul(buf, NULL, 0); \ 345 345 if (val > tp->max_##field) \