Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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.

Some of these, like the nested spinlock overwriting saved flags and
the Kasan use after free look serious, but they seem not to have been
picked up in testing or seen in the field.

The biggest user visible issue is probably the wrong device handler
for Clariion, which means that alua doesn't bind to the array like it
should"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
scsi: ipr: Fix async error WARN_ON
scsi: zfcp: spin_lock_irqsave() is not nestable
scsi: Remove one useless stack variable
scsi: Fix use-after-free
scsi: Replace wrong device handler name for CLARiiON arrays

+6 -11
+1 -1
drivers/s390/scsi/zfcp_dbf.c
··· 384 384 /* if (len > rec_len): 385 385 * dump data up to cap_len ignoring small duplicate in rec->payload 386 386 */ 387 - spin_lock_irqsave(&dbf->pay_lock, flags); 387 + spin_lock(&dbf->pay_lock); 388 388 memset(payload, 0, sizeof(*payload)); 389 389 memcpy(payload->area, paytag, ZFCP_DBF_TAG_LEN); 390 390 payload->fsf_req_id = req_id;
+1 -2
drivers/scsi/ipr.c
··· 2586 2586 struct ipr_hostrcb *hostrcb = ipr_cmd->u.hostrcb; 2587 2587 u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc); 2588 2588 u32 fd_ioasc; 2589 - char *envp[] = { "ASYNC_ERR_LOG=1", NULL }; 2590 2589 2591 2590 if (ioa_cfg->sis64) 2592 2591 fd_ioasc = be32_to_cpu(hostrcb->hcam.u.error64.fd_ioasc); ··· 2606 2607 } 2607 2608 2608 2609 list_add_tail(&hostrcb->queue, &ioa_cfg->hostrcb_report_q); 2610 + schedule_work(&ioa_cfg->work_q); 2609 2611 hostrcb = ipr_get_free_hostrcb(ioa_cfg); 2610 - kobject_uevent_env(&ioa_cfg->host->shost_dev.kobj, KOBJ_CHANGE, envp); 2611 2612 2612 2613 ipr_send_hcam(ioa_cfg, IPR_HCAM_CDB_OP_CODE_LOG_DATA, hostrcb); 2613 2614 }
+3 -3
drivers/scsi/scsi_dh.c
··· 36 36 }; 37 37 38 38 static const struct scsi_dh_blist scsi_dh_blist[] = { 39 - {"DGC", "RAID", "clariion" }, 40 - {"DGC", "DISK", "clariion" }, 41 - {"DGC", "VRAID", "clariion" }, 39 + {"DGC", "RAID", "emc" }, 40 + {"DGC", "DISK", "emc" }, 41 + {"DGC", "VRAID", "emc" }, 42 42 43 43 {"COMPAQ", "MSA1000 VOLUME", "hp_sw" }, 44 44 {"COMPAQ", "HSV110", "hp_sw" },
+1 -5
drivers/scsi/scsi_scan.c
··· 1307 1307 static int scsi_report_lun_scan(struct scsi_target *starget, int bflags, 1308 1308 enum scsi_scan_mode rescan) 1309 1309 { 1310 - char devname[64]; 1311 1310 unsigned char scsi_cmd[MAX_COMMAND_SIZE]; 1312 1311 unsigned int length; 1313 1312 u64 lun; ··· 1347 1348 return 0; 1348 1349 } 1349 1350 } 1350 - 1351 - sprintf(devname, "host %d channel %d id %d", 1352 - shost->host_no, sdev->channel, sdev->id); 1353 1351 1354 1352 /* 1355 1353 * Allocate enough to hold the header (the same size as one scsi_lun) ··· 1466 1470 out_err: 1467 1471 kfree(lun_data); 1468 1472 out: 1469 - scsi_device_put(sdev); 1470 1473 if (scsi_device_created(sdev)) 1471 1474 /* 1472 1475 * the sdev we used didn't appear in the report luns scan 1473 1476 */ 1474 1477 __scsi_remove_device(sdev); 1478 + scsi_device_put(sdev); 1475 1479 return ret; 1476 1480 } 1477 1481