Make it possible to interrupt proxy-mode iscsid receive.
MFC after: 1 month Sponsored by: The FreeBSD Foundation
This commit is contained in:
parent
cfce4fbe6f
commit
2f0586b2ce
@ -1634,6 +1634,7 @@ iscsi_ioctl_daemon_receive(struct iscsi_softc *sc,
|
|||||||
struct iscsi_session *is;
|
struct iscsi_session *is;
|
||||||
struct icl_pdu *ip;
|
struct icl_pdu *ip;
|
||||||
void *data;
|
void *data;
|
||||||
|
int error;
|
||||||
|
|
||||||
sx_slock(&sc->sc_lock);
|
sx_slock(&sc->sc_lock);
|
||||||
TAILQ_FOREACH(is, &sc->sc_sessions, is_next) {
|
TAILQ_FOREACH(is, &sc->sc_sessions, is_next) {
|
||||||
@ -1652,8 +1653,13 @@ iscsi_ioctl_daemon_receive(struct iscsi_softc *sc,
|
|||||||
ISCSI_SESSION_LOCK(is);
|
ISCSI_SESSION_LOCK(is);
|
||||||
while (is->is_login_pdu == NULL &&
|
while (is->is_login_pdu == NULL &&
|
||||||
is->is_terminating == false &&
|
is->is_terminating == false &&
|
||||||
is->is_reconnecting == false)
|
is->is_reconnecting == false) {
|
||||||
cv_wait(&is->is_login_cv, &is->is_lock);
|
error = cv_wait_sig(&is->is_login_cv, &is->is_lock);
|
||||||
|
if (error != 0) {
|
||||||
|
ISCSI_SESSION_UNLOCK(is);
|
||||||
|
return (error);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (is->is_terminating || is->is_reconnecting) {
|
if (is->is_terminating || is->is_reconnecting) {
|
||||||
ISCSI_SESSION_UNLOCK(is);
|
ISCSI_SESSION_UNLOCK(is);
|
||||||
return (EIO);
|
return (EIO);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user