Page MenuHomeFreeBSD

D34230.id102560.diff
No OneTemporary

D34230.id102560.diff

Index: sys/dev/iscsi/icl_soft_proxy.c
===================================================================
--- sys/dev/iscsi/icl_soft_proxy.c
+++ sys/dev/iscsi/icl_soft_proxy.c
@@ -177,6 +177,7 @@
icl_listen_free(struct icl_listen *il)
{
struct icl_listen_sock *ils;
+ sbintime_t sbt, pr;
sx_xlock(&il->il_lock);
while (!TAILQ_EMPTY(&il->il_sockets)) {
@@ -188,7 +189,9 @@
ils->ils_socket->so_error = ENOTCONN;
SOLISTEN_UNLOCK(ils->ils_socket);
wakeup(&ils->ils_socket->so_timeo);
- pause("icl_unlisten", 1 * hz);
+ sbt = SBT_1S - 5 * SBT_1MS;
+ pr = 10 * SBT_1MS;
+ pause_sbt("icl_unlisten", sbt, pr, 0);
sx_xlock(&il->il_lock);
}
Index: sys/dev/iscsi/iscsi.c
===================================================================
--- sys/dev/iscsi/iscsi.c
+++ sys/dev/iscsi/iscsi.c
@@ -546,6 +546,7 @@
struct iscsi_bhs_nop_out *bhsno;
struct iscsi_session *is;
bool reconnect_needed = false;
+ sbintime_t sbt, pr;
is = context;
@@ -555,7 +556,9 @@
return;
}
- callout_schedule(&is->is_callout, 1 * hz);
+ sbt = ((ping_timeout * SBT_1S) / 3) - 5 * SBT_1MS;
+ pr = 10 * SBT_1MS;
+ callout_schedule_sbt(&is->is_callout, sbt, pr, 0);
if (is->is_conf.isc_enable == 0)
goto out;
@@ -563,7 +566,7 @@
is->is_timeout++;
if (is->is_waiting_for_iscsid) {
- if (iscsid_timeout > 0 && is->is_timeout > iscsid_timeout) {
+ if (iscsid_timeout > 0 && is->is_timeout > 0) {
ISCSI_SESSION_WARN(is, "timed out waiting for iscsid(8) "
"for %d seconds; reconnecting",
is->is_timeout);
@@ -573,7 +576,7 @@
}
if (is->is_login_phase) {
- if (login_timeout > 0 && is->is_timeout > login_timeout) {
+ if (login_timeout > 0 && is->is_timeout > 0) {
ISCSI_SESSION_WARN(is, "login timed out after %d seconds; "
"reconnecting", is->is_timeout);
reconnect_needed = true;
@@ -591,7 +594,7 @@
goto out;
}
- if (is->is_timeout >= ping_timeout) {
+ if (is->is_timeout >= 3) {
ISCSI_SESSION_WARN(is, "no ping reply (NOP-In) after %d seconds; "
"reconnecting", ping_timeout);
reconnect_needed = true;
@@ -1401,6 +1404,12 @@
is->is_waiting_for_iscsid = false;
is->is_login_phase = true;
+ is->is_timeout = 0;
+ sbt = SBT_1S - 5 * SBT_1MS;
+ pr = 10 * SBT_1MS;
+ if (login_timeout > 0)
+ sbt = login_timeout * SBT_1S - 5 * SBT_1MS;
+ callout_schedule_sbt(&is->is_callout, sbt, pr, 0);
is->is_reason[0] = '\0';
ISCSI_SESSION_UNLOCK(is);
@@ -1507,6 +1516,11 @@
is->is_login_phase = false;
is->is_timeout = 0;
is->is_connected = true;
+ sbt = SBT_1S - 5 * SBT_1MS;
+ pr = 10 * SBT_1MS;
+ if (ping_timeout > 0)
+ sbt = ((ping_timeout * SBT_1S) / 3) - 5 * SBT_1MS;
+ callout_schedule(&is->is_callout, sbt, pr, 0);
is->is_reason[0] = '\0';
ISCSI_SESSION_UNLOCK(is);
@@ -1616,6 +1630,7 @@
struct iscsi_session *is;
struct sockaddr *from_sa, *to_sa;
int error;
+ sbintime_t sbt, pr;
sx_slock(&sc->sc_lock);
TAILQ_FOREACH(is, &sc->sc_sessions, is_next) {
@@ -1654,6 +1669,11 @@
is->is_waiting_for_iscsid = false;
is->is_login_phase = true;
is->is_timeout = 0;
+ sbt = SBT_1S - 5 * SBT_1MS;
+ pr = 10 * SBT_1MS;
+ if (login_timeout > 0)
+ sbt = login_timeout * SBT_1S - 5 * SBT_1MS;
+ callout_schedule_sbt(&is->is_callout, sbt, pr, 0);
ISCSI_SESSION_UNLOCK(is);
error = icl_conn_connect(is->is_conn, idc->idc_domain,
@@ -1835,6 +1855,7 @@
struct iscsi_session *is;
const struct iscsi_session *is2;
int error;
+ sbintime_t sbt, pr;
iscsi_sanitize_session_conf(&isa->isa_conf);
if (iscsi_valid_session_conf(&isa->isa_conf) == false)
@@ -1912,7 +1933,12 @@
return (error);
}
- callout_reset(&is->is_callout, 1 * hz, iscsi_callout, is);
+ sbt = SBT_1S - 5 * SBT_1MS;
+ pr = 10 * SBT_1MS;
+ if (iscsid_timeout > 0) {
+ sbt = iscsid_timeout * SBT_1S - 5 * SBT_1MS;
+ }
+ callout_reset_sbt(&is->is_callout, sbt, pr, iscsi_callout, is, 0);
TAILQ_INSERT_TAIL(&sc->sc_sessions, is, is_next);
ISCSI_SESSION_LOCK(is);

File Metadata

Mime Type
text/plain
Expires
Mon, May 18, 10:47 AM (15 h, 34 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33244729
Default Alt Text
D34230.id102560.diff (3 KB)

Event Timeline