Mercurial > illumos > illumos-gate
changeset 12933:1d9a1ccf92e6
6972190 stmf_ic_scsi_cmd_msg_unmarshal() messages when discovering LUNs on standby path
author | Sue Gleeson <Susan.Gleeson@Sun.COM> |
---|---|
date | Tue, 27 Jul 2010 12:42:15 -0400 |
parents | ee579b934f0a |
children | c58988eacbb2 |
files | usr/src/uts/common/io/comstar/port/pppt/alua_ic_if.c usr/src/uts/common/io/comstar/port/pppt/pppt_msg.c |
diffstat | 2 files changed, 25 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/common/io/comstar/port/pppt/alua_ic_if.c Tue Jul 27 16:48:10 2010 +0100 +++ b/usr/src/uts/common/io/comstar/port/pppt/alua_ic_if.c Tue Jul 27 12:42:15 2010 -0400 @@ -664,11 +664,14 @@ sizeof (icsc->icsc_task_lun_no)); icsc->icsc_task_expected_xfer_length = task->task_expected_xfer_length; - icsc->icsc_task_cdb_length = task->task_cdb_length; - - icsc->icsc_task_cdb = (uint8_t *)kmem_zalloc(task->task_cdb_length, - KM_SLEEP); - bcopy(task->task_cdb, icsc->icsc_task_cdb, task->task_cdb_length); + if (task->task_cdb_length) { + ASSERT(task->task_mgmt_function == TM_NONE); + icsc->icsc_task_cdb_length = task->task_cdb_length; + icsc->icsc_task_cdb = + (uint8_t *)kmem_zalloc(task->task_cdb_length, KM_SLEEP); + bcopy(task->task_cdb, icsc->icsc_task_cdb, + task->task_cdb_length); + } icsc->icsc_task_flags = task->task_flags; icsc->icsc_task_priority = task->task_priority; @@ -1019,7 +1022,7 @@ scsi_devid_desc_free(m->icsc_ini_devid); scsi_devid_desc_free(m->icsc_tgt_devid); stmf_remote_port_free(m->icsc_rport); - if (cmethod == STMF_CONSTRUCTOR) { + if ((cmethod == STMF_CONSTRUCTOR) && m->icsc_task_cdb) { kmem_free(m->icsc_task_cdb, m->icsc_task_cdb_length); } @@ -1256,6 +1259,10 @@ NVLIST_ADD_ARRAY_LEN(uint8, m, icsc_task_lun_no, 8); NVLIST_ADD_FIELD(uint32, m, icsc_task_expected_xfer_length); NVLIST_ADD_FIELD(uint16, m, icsc_task_cdb_length); + /* + * icsc_task_cdb_length may be zero in the case of a task + * management function. + */ NVLIST_ADD_ARRAY_LEN(uint8, m, icsc_task_cdb, m->icsc_task_cdb_length); NVLIST_ADD_FIELD(uint8, m, icsc_task_flags); NVLIST_ADD_FIELD(uint8, m, icsc_task_priority); @@ -1741,12 +1748,14 @@ } /* icsc_task_cdb */ - m->icsc_task_cdb = stmf_ic_uint8_array_unmarshal(nvl, "icsc_task_cdb", - m->icsc_task_cdb_length, NULL); - if (!m->icsc_task_cdb) { - stmf_ic_nvlookup_warn(__func__, "icsc_task_cdb"); - rc = ENOMEM; - goto done; + if (m->icsc_task_cdb_length) { + m->icsc_task_cdb = stmf_ic_uint8_array_unmarshal(nvl, + "icsc_task_cdb", m->icsc_task_cdb_length, NULL); + if (!m->icsc_task_cdb) { + stmf_ic_nvlookup_warn(__func__, "icsc_task_cdb"); + rc = ENOMEM; + goto done; + } } /* immediate data, if there is any */
--- a/usr/src/uts/common/io/comstar/port/pppt/pppt_msg.c Tue Jul 27 16:48:10 2010 +0100 +++ b/usr/src/uts/common/io/comstar/port/pppt/pppt_msg.c Tue Jul 27 12:42:15 2010 -0400 @@ -354,8 +354,10 @@ task->task_expected_xfer_length = scmd->icsc_task_expected_xfer_length; - bcopy(scmd->icsc_task_cdb, task->task_cdb, - scmd->icsc_task_cdb_length); + if (scmd->icsc_task_cdb_length) { + bcopy(scmd->icsc_task_cdb, task->task_cdb, + scmd->icsc_task_cdb_length); + } bcopy(scmd->icsc_lun_id, ptask->pt_lun_id, 16); if (scmd->icsc_immed_data_len) {