summaryrefslogtreecommitdiff
path: root/usr
diff options
context:
space:
mode:
Diffstat (limited to 'usr')
-rw-r--r--usr/iscsistart.c24
1 files changed, 8 insertions, 16 deletions
diff --git a/usr/iscsistart.c b/usr/iscsistart.c
index 7eb573e..b23751b 100644
--- a/usr/iscsistart.c
+++ b/usr/iscsistart.c
@@ -241,26 +241,18 @@ static int login_session(struct node_rec *rec)
/*
* Need to handle race where iscsid proc is starting up while we are
* trying to connect. Retry with exponential backoff, start from 50 ms.
- *
- * NOTE: another race condition can occur if the system is just coming
- * up, where our login request will be sent, but the login response
- * takes a while. In such a case, if we timeout and give up, the
- * login response may still show up once we give up, in which case
- * it seems to get iscsistart into a state where it cannot try to
- * login again because it thinks there's already a session. So make
- * sure our timeout is long enough, on each try, to give the response
- * a chance to show up. The old value of 1 second was not enough,
- * so we multiply that by 10, which seems reasonable for initial
- * login.
*/
for (msec = 50; msec <= 15000; msec <<= 1) {
- int tmo = ISCSID_REQ_TIMEOUT * 10;
-
- rc = iscsid_exec_req(&req, &rsp, 0, tmo);
+ /*
+ * Once our event loop is up then we want to wait for the login
+ * response. Either it logs in, we hit the login retries count,
+ * or this program crashes, so there no need for the response
+ * timeout.
+ */
+ rc = iscsid_exec_req(&req, &rsp, 0, -1);
if (rc == 0) {
return rc;
- } else if (rc == ISCSI_ERR_SESSION_NOT_CONNECTED ||
- rc == ISCSI_ERR_ISCSID_NOTCONN) {
+ } else if (rc == ISCSI_ERR_ISCSID_NOTCONN) {
ts.tv_sec = msec / 1000;
ts.tv_nsec = (msec % 1000) * 1000000L;