sanlock: tolerate longer read delays in renewal
Previously, a renewal read that timed out was abandoned and
then retried. If the first read actually completed during
the second (retried) read, the first would be ignored, despite
the fact that it could be used.
Now, a timed out read is given an extra io timeout interval to
complete as part of the subsequent renewal retry. If the first
read completes during the first phase of the second retry read,
it will be used.
This effectively doubles the length of time that renewal reads
can persistently take without having any negative effect on
the operation of the lockspace.
If read io was persistently taking just longer than the io
timeout, lease renewal would never get beyond the read phase,
and the lockspace would enter recovery mode. Now, the read
io can be persistently delayed by up to twice the io timeout
before this happens. Furthermore, the extended timeout for
the read can be configured to be even longer, to compensate
for reads that are persistently delayed even longer. The
effect of extending the read timeout is that the time allowed
for the renewal write to complete is reduced. The read and
the write for a renewal must still both complete within
the same time limit before the renewal is considered to
have failed and the lockspace enters recovery mode.