diff --git a/pkg/scsi/sbc.go b/pkg/scsi/sbc.go index ad54aec..98e7a0f 100644 --- a/pkg/scsi/sbc.go +++ b/pkg/scsi/sbc.go @@ -101,7 +101,7 @@ func (sbc SBCSCSIDeviceProtocol) InitLu(lu *api.SCSILu) error { // Disconnect page pages = append(pages, api.ModePage{2, 0, 14, []byte{0x80, 0x80, 0, 0xa, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}) // Caching Page - pages = append(pages, api.ModePage{8, 0, 18, []byte{0x14, 0, 0xff, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x80, 0x14, 0, 0, 0, 0, 0, 0, 0x4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}) + pages = append(pages, api.ModePage{8, 0, 18, []byte{0x14, 0, 0xff, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x80, 0x14, 0, 0, 0, 0, 0, 0}}) // Control page pages = append(pages, api.ModePage{0x0a, 0, 10, []byte{2, 0x10, 0, 0, 0, 0, 0, 0, 2, 0, 0x08, 0, 0, 0, 0, 0, 0, 0}}) diff --git a/pkg/scsi/spc.go b/pkg/scsi/spc.go index cc1bc7e..cec5d1a 100644 --- a/pkg/scsi/spc.go +++ b/pkg/scsi/spc.go @@ -476,9 +476,9 @@ func SPCModeSense(host int, cmd *api.SCSICommand) api.SAMStat { asc = ASC_INVALID_FIELD_IN_CDB data []byte allocLen uint32 - remainLen uint32 i uint32 ) + if dbd == 0 { blkDesctionLen = 8 } @@ -499,22 +499,15 @@ func SPCModeSense(host int, cmd *api.SCSICommand) api.SAMStat { data = append(data, 0x00) } } - remainLen = allocLen - uint32(len(data)) - if dbd == 0 && remainLen >= 8 { + if dbd == 0 { data = append(data, cmd.Device.ModeBlockDescriptor...) } if pcode == 0x3f { for _, pg := range cmd.Device.ModePages { if pg.SubPageCode == 0 { - if remainLen < 2+uint32(pg.Size) { - break - } data = append(data, pg.PageCode) data = append(data, pg.Size) } else { - if remainLen < 4+uint32(pg.Size) { - break - } data = append(data, pg.PageCode|0x40) data = append(data, pg.SubPageCode) data = append(data, (pg.Size>>8)&0xff) @@ -537,27 +530,24 @@ func SPCModeSense(host int, cmd *api.SCSICommand) api.SAMStat { if pg == nil { goto sense } - if remainLen >= 2+uint32(pg.Size) { - if pg.SubPageCode == 0 { - data = append(data, pg.PageCode) - data = append(data, pg.Size) - if pctrl == 1 { - data = append(data, pg.Data[pg.Size:]...) - } else { - data = append(data, pg.Data[:pg.Size]...) - } - } else if remainLen >= 4+uint32(pg.Size) { - data = append(data, pg.PageCode|0x40) - data = append(data, pg.SubPageCode) - data = append(data, (pg.Size>>8)&0xff) - data = append(data, pg.Size&0xff) - if pctrl == 1 { - data = append(data, pg.Data[pg.Size:]...) - } else { - data = append(data, pg.Data[:pg.Size]...) - } + if pg.SubPageCode == 0 { + data = append(data, pg.PageCode) + data = append(data, pg.Size) + if pctrl == 1 { + data = append(data, pg.Data[pg.Size:]...) + } else { + data = append(data, pg.Data[:pg.Size]...) + } + } else { + data = append(data, pg.PageCode|0x40) + data = append(data, pg.SubPageCode) + data = append(data, (pg.Size>>8)&0xff) + data = append(data, pg.Size&0xff) + if pctrl == 1 { + data = append(data, pg.Data[pg.Size:]...) + } else { + data = append(data, pg.Data[:pg.Size]...) } - } } if mode6 { @@ -569,8 +559,8 @@ func SPCModeSense(host int, cmd *api.SCSICommand) api.SAMStat { data[6] = uint8(blkDesctionLen >> 8) data[7] = uint8(blkDesctionLen) } - if rlen := uint32(len(data)); rlen < allocLen { - cmd.InSDBBuffer.Resid = rlen + if rlen := uint32(len(data)); rlen > allocLen { + cmd.InSDBBuffer.Resid = allocLen } copy(cmd.InSDBBuffer.Buffer, data) return api.SAMStatGood