u64 sgl_addr, u64 sns_addr,
                                                    u8 crn, u8 pri_ta,
                                                    u8 flags, u8 *scsi_cdb,
+                                                   u8 cdb_len,
                                                    u32 data_len, u8 *lun,
                                                    u32 d_id, u16 mss,
                                                    u32 ratov, u32 edtov)
        desc->u.icmnd_16.pri_ta = pri_ta;       /* SCSI Pri & Task attribute */
        desc->u.icmnd_16._resvd1 = 0;           /* reserved: should be 0 */
        desc->u.icmnd_16.flags = flags;         /* command flags */
-       memcpy(desc->u.icmnd_16.scsi_cdb, scsi_cdb, CDB_16);    /* SCSI CDB */
+       memset(desc->u.icmnd_16.scsi_cdb, 0, CDB_16);
+       memcpy(desc->u.icmnd_16.scsi_cdb, scsi_cdb, cdb_len);    /* SCSI CDB */
        desc->u.icmnd_16.data_len = data_len;   /* length of data expected */
        memcpy(desc->u.icmnd_16.lun, lun, LUN_ADDRESS);  /* LUN address */
        desc->u.icmnd_16._resvd2 = 0;           /* reserved */
 
                                         0, /* scsi cmd ref, always 0 */
                                         pri_tag, /* scsi pri and tag */
                                         flags, /* command flags */
-                                        sc->cmnd, scsi_bufflen(sc),
+                                        sc->cmnd, sc->cmd_len,
+                                        scsi_bufflen(sc),
                                         fc_lun.scsi_lun, io_req->port_id,
                                         rport->maxframe_size, rp->r_a_tov,
                                         rp->e_d_tov);