diff --git a/pkg/port/iscsit/iscsid.go b/pkg/port/iscsit/iscsid.go index c65e444..2022674 100644 --- a/pkg/port/iscsit/iscsid.go +++ b/pkg/port/iscsit/iscsid.go @@ -376,12 +376,19 @@ func (s *ISCSITargetDriver) handler(events byte, conn *iscsiConnection) { } func (s *ISCSITargetDriver) clearHostIP(conn *iscsiConnection) { + if conn.conn == nil { + return + } IPMutex.Lock() - remoteIP := strings.Split(conn.conn.RemoteAddr().String(), ":")[0] + defer IPMutex.Unlock() + addr := conn.conn.RemoteAddr() + if addr == nil { + return + } + remoteIP := strings.Split(addr.String(), ":")[0] if CurrentHostIP == remoteIP { CurrentHostIP = "" } - IPMutex.Unlock() } func (s *ISCSITargetDriver) rxHandler(conn *iscsiConnection) { diff --git a/pkg/port/iscsit/session.go b/pkg/port/iscsit/session.go index d3bb8ea..b6c8aa3 100644 --- a/pkg/port/iscsit/session.go +++ b/pkg/port/iscsit/session.go @@ -330,10 +330,17 @@ func (s *ISCSITargetDriver) LookupISCSISession(tgtName string, iniName string, i func (s *ISCSITargetDriver) UnBindISCSISession(sess *ISCSISession) { target := sess.Target + if target == nil { + // Discovery sessions have no target; just release the TSIH. + s.ReleaseTSIH(sess.TSIH) + return + } target.SessionsRWMutex.Lock() defer target.SessionsRWMutex.Unlock() delete(target.Sessions, sess.TSIH) - scsi.RemoveITNexus(sess.Target.SCSITarget, sess.ITNexus) + if sess.ITNexus != nil { + scsi.RemoveITNexus(target.SCSITarget, sess.ITNexus) + } s.ReleaseTSIH(sess.TSIH) log.Infof("session %x unbound from target %s", sess.TSIH, target.SCSITarget.Name) }