Leeman,

Thanks very much for your comments. See inline:

On Mon, Apr 16, 2018 at 2:38 PM, The Lee-Man <leeman.dun...@gmail.com>
wrote:
...
>> -retry:
>> -        rc = iscsid_exec_req(&req, &rsp, 0, ISCSID_REQ_TIMEOUT);
>>          /*
>> -         * handle race where iscsid proc is starting up while we are
>> -         * trying to connect.
>> +         * Need to handle race where iscsid proc is starting up while
we are
>> +         * trying to connect. Retry with exponential backoff, start
from 50 ms.
>>           */
>> -        if (rc == ISCSI_ERR_ISCSID_NOTCONN && retries < 30) {
>> -                retries++;
>> -                sleep(1);
>> -                goto retry;
>> -        } else if (rc)
>> -                iscsi_err_print_msg(rc);
>> +        for (msec = 50; msec <= 15000; msec <<= 1) {
>
>
> Why are you using 50 -> 15000? Isn't the sequence then going to be:
>   -> 50
>   -> 100
>   -> 200
>   -> 400
>   -> 800
>   -> 1600 (too large)
>
> So why not either go to 800 or to 1600?


I saw your another email. Yes, with the old implementation, retry gives up
until 30 seconds, that is why we choose to stop at 30s/2.
>
>
>> +                rc = iscsid_exec_req(&req, &rsp, 0, ISCSID_REQ_TIMEOUT);
>> +                if (rc == 0) {
>> +                        return rc;
>> +                } else if (rc == ISCSI_ERR_ISCSID_NOTCONN) {
>> +                        ts.tv_sec = msec / 1000;
>> +                        ts.tv_nsec = (msec % 1000) * 1000000L;
>> +
>> +                        /* On EINTR, retry nanosleep with remaining
time. */
>> +                        while ((err = nanosleep(&ts, &ts)) < 0 &&
>> +                               errno == EINTR);
>
>
> I'd feel better about this if you used one more level of parenthesis.
>
>
> Also, why are you supplying two timespec values? You don't care about
> the remainder, so pass in a NULL as the second argument?

As the comments explained: on EINTR, we will retry nanosleep with the
remaining time, that is why we care about the remainder. Hopefully this
also explains why we don't need one more level of parenthesis.

>>
>> +                        if (err < 0)
>> +                                break;
>> +                } else {
>> +                        break;
>> +                }
>> +        }
>> +
>> +        iscsi_err_print_msg(rc);
>>          return rc;
>>  }
>>
>
>
> Also, what kind of time improvement did you see with this?


>From what we can see, the interval between below two log messages has been
reduced from 1s to 0.05s.

        systemd[689]: Executing: /usr/sbin/iscsistart -i ...
        scsi host2: iSCSI Initiator over TCP/IP

Thanks
- Cathy


>>
>> --
>> 2.17.0
>>
> --
> You received this message because you are subscribed to the Google Groups
"open-iscsi" group.
> To unsubscribe from this group and stop receiving emails from it, send an
email to open-iscsi+unsubscr...@googlegroups.com.
> To post to this group, send email to open-iscsi@googlegroups.com.
> Visit this group at https://groups.google.com/group/open-iscsi.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"open-iscsi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to open-iscsi+unsubscr...@googlegroups.com.
To post to this group, send email to open-iscsi@googlegroups.com.
Visit this group at https://groups.google.com/group/open-iscsi.
For more options, visit https://groups.google.com/d/optout.

Reply via email to