fix several bugs during read/write operations
This commit is contained in:
@@ -185,7 +185,7 @@ func parseHeader(data []byte) (*ISCSICommand, error) {
|
||||
m.TaskTag = uint32(ParseUint(data[16:20]))
|
||||
switch m.OpCode {
|
||||
case OpSCSICmd, OpSCSITaskReq:
|
||||
m.LUN = [8]uint8{data[9]}
|
||||
m.LUN = [8]byte{data[9]}
|
||||
m.ExpectedDataLen = uint32(ParseUint(data[20:24]))
|
||||
m.CmdSN = uint32(ParseUint(data[24:28]))
|
||||
m.Read = data[1]&0x40 == 0x40
|
||||
@@ -194,7 +194,7 @@ func parseHeader(data []byte) (*ISCSICommand, error) {
|
||||
m.ExpStatSN = uint32(ParseUint(data[28:32]))
|
||||
case OpSCSIResp:
|
||||
case OpSCSIOut:
|
||||
m.LUN = [8]uint8{data[9]}
|
||||
m.LUN = [8]byte{data[9]}
|
||||
m.ExpStatSN = uint32(ParseUint(data[28:32]))
|
||||
m.DataSN = uint32(ParseUint(data[36:40]))
|
||||
m.BufferOffset = uint32(ParseUint(data[40:44]))
|
||||
|
||||
@@ -243,6 +243,17 @@ func (s *ISCSITargetService) iscsiExecLogin(conn *iscsiConnection) error {
|
||||
RawData: util.MarshalKVText([]util.KeyValue{
|
||||
{"HeaderDigest", "None"},
|
||||
{"DataDigest", "None"},
|
||||
{"ImmediateData", "Yes"},
|
||||
{"InitialR2T", "Yes"},
|
||||
{"MaxBurstLength", "262144"},
|
||||
{"FirstBurstLength", "65536"},
|
||||
{"DefaultTime2Wait", "2"},
|
||||
{"DefaultTime2Retain", "0"},
|
||||
{"MaxOutstandingR2T", "1"},
|
||||
{"IFMarker", "No"},
|
||||
{"OFMarker", "No"},
|
||||
{"DataPDUInOrder", "Yes"},
|
||||
{"DataSequenceInOrder", "Yes"},
|
||||
}),
|
||||
}
|
||||
pairs := util.ParseKVText(cmd.RawData)
|
||||
@@ -332,7 +343,7 @@ func (s *ISCSITargetService) iscsiExecText(conn *iscsiConnection) error {
|
||||
}
|
||||
for _, t := range list {
|
||||
result = append(result, util.KeyValue{"TargetName", t.Name})
|
||||
result = append(result, util.KeyValue{"TargetAddress", "172.16.69.169:3260,1"})
|
||||
result = append(result, util.KeyValue{"TargetAddress", "172.16.69.1:3260,1"})
|
||||
//result = append(result, util.KeyValue{"TargetAddress", "127.0.0.1:3260,1"})
|
||||
}
|
||||
}
|
||||
@@ -495,6 +506,7 @@ func (s *ISCSITargetService) scsiCommandHandler(conn *iscsiConnection) (err erro
|
||||
}
|
||||
task.scmd.OutSDBBuffer.Buffer.Write(conn.req.RawData)
|
||||
if task.r2tCount > 0 {
|
||||
conn.session.ExpCmdSN += 1
|
||||
// prepare to receive more data
|
||||
task.state = taskPending
|
||||
conn.session.PendingTasks.Push(task)
|
||||
@@ -703,6 +715,7 @@ func (s *ISCSITargetService) iscsiTaskQueueHandler(task *iscsiTask) error {
|
||||
// add this connection into queue and set this task as pending task
|
||||
task.state = taskPending
|
||||
sess.PendingTasks.Push(task)
|
||||
return fmt.Errorf("pending")
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user