Skip to content

Commit

Permalink
Make iSCSI connection close somewhat less aggressive.
Browse files Browse the repository at this point in the history
It allows to push out some final data from the send queue to the socket
before its close.  In particular, it increases chances for logout response
to be delivered to the initiator.
  • Loading branch information
amotin committed Oct 9, 2014
1 parent 3dce4cb commit 259f12d
Show file tree
Hide file tree
Showing 4 changed files with 5 additions and 25 deletions.
1 change: 0 additions & 1 deletion sys/cam/ctl/ctl_frontend_iscsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -1135,7 +1135,6 @@ cfiscsi_maintenance_thread(void *arg)
* that anymore. We might need to revisit that.
*/
callout_drain(&cs->cs_callout);
icl_conn_shutdown(cs->cs_conn);
icl_conn_close(cs->cs_conn);

/*
Expand Down
27 changes: 5 additions & 22 deletions sys/dev/iscsi/icl.c
Original file line number Diff line number Diff line change
Expand Up @@ -873,8 +873,6 @@ icl_conn_send_pdus(struct icl_conn *ic, struct icl_pdu_stailq *queue)
SOCKBUF_UNLOCK(&so->so_snd);

while (!STAILQ_EMPTY(queue)) {
if (ic->ic_disconnecting)
return;
request = STAILQ_FIRST(queue);
size = icl_pdu_size(request);
if (available < size) {
Expand Down Expand Up @@ -971,11 +969,6 @@ icl_send_thread(void *arg)
ic->ic_send_running = true;

for (;;) {
if (ic->ic_disconnecting) {
//ICL_DEBUG("terminating");
break;
}

for (;;) {
/*
* If the local queue is empty, populate it from
Expand Down Expand Up @@ -1014,6 +1007,11 @@ icl_send_thread(void *arg)
break;
}

if (ic->ic_disconnecting) {
//ICL_DEBUG("terminating");
break;
}

cv_wait(&ic->ic_send_cv, ic->ic_lock);
}

Expand Down Expand Up @@ -1297,21 +1295,6 @@ icl_conn_handoff(struct icl_conn *ic, int fd)
return (error);
}

void
icl_conn_shutdown(struct icl_conn *ic)
{
ICL_CONN_LOCK_ASSERT_NOT(ic);

ICL_CONN_LOCK(ic);
if (ic->ic_socket == NULL) {
ICL_CONN_UNLOCK(ic);
return;
}
ICL_CONN_UNLOCK(ic);

soshutdown(ic->ic_socket, SHUT_RDWR);
}

void
icl_conn_close(struct icl_conn *ic)
{
Expand Down
1 change: 0 additions & 1 deletion sys/dev/iscsi/icl.h
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,6 @@ struct icl_conn {
struct icl_conn *icl_conn_new(const char *name, struct mtx *lock);
void icl_conn_free(struct icl_conn *ic);
int icl_conn_handoff(struct icl_conn *ic, int fd);
void icl_conn_shutdown(struct icl_conn *ic);
void icl_conn_close(struct icl_conn *ic);
bool icl_conn_connected(struct icl_conn *ic);

Expand Down
1 change: 0 additions & 1 deletion sys/dev/iscsi/iscsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -367,7 +367,6 @@ static void
iscsi_maintenance_thread_reconnect(struct iscsi_session *is)
{

icl_conn_shutdown(is->is_conn);
icl_conn_close(is->is_conn);

ISCSI_SESSION_LOCK(is);
Expand Down

0 comments on commit 259f12d

Please sign in to comment.