fix critical bugs and improve iSCSI protocol compliance

- Fix nil pointer dereference in BindISCSISession when existSess is nil
- Fix reversed logic in SPCLuOffline/SPCLuOnline (Online flag was swapped)
- Use negotiated MaxXmitDataSegmentLength for response PDU segmentation (issue #41)
- Fix debug log incorrectly using Warn level in SBCGetLbaStatus

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Lei Xue
2026-03-14 12:11:23 +08:00
parent 2bfc4cae7d
commit b2776dc5c2
4 changed files with 10 additions and 4 deletions

View File

@@ -789,7 +789,7 @@ func SBCGetLbaStatus(host int, cmd *api.SCSICommand) api.SAMStat {
tl = getSCSIReadWriteCount(scb)
// Verify that we are not doing i/o beyond the end-of-lun
totalBlocks = dev.Size >> dev.BlockShift
log.Warnf("DEBUG: dev.Size=%d, BlockShift=%d, totalBlocks=%d", dev.Size, dev.BlockShift, totalBlocks)
log.Debugf("dev.Size=%d, BlockShift=%d, totalBlocks=%d", dev.Size, dev.BlockShift, totalBlocks)
if lba >= totalBlocks || lba+uint64(tl) < lba || lba+uint64(tl) > totalBlocks {
key = ILLEGAL_REQUEST
asc = ASC_LBA_OUT_OF_RANGE

View File

@@ -38,7 +38,7 @@ func SPCIllegalOp(host int, cmd *api.SCSICommand) api.SAMStat {
}
func SPCLuOffline(lu *api.SCSILu) error {
lu.Attrs.Online = true
lu.Attrs.Online = false
return nil
}
@@ -47,7 +47,7 @@ func SPCLuOnline(lu *api.SCSILu) error {
return fmt.Errorf("lu prevent removal")
}
lu.Attrs.Online = false
lu.Attrs.Online = true
return nil
}