<div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-size:small">Hi Martin,</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Feb 7, 2020 at 7:22 PM Martin Doucha <<a href="mailto:mdoucha@suse.cz" target="_blank">mdoucha@suse.cz</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">The TST_RETRY_FUNC() macro requires a single return value that'll be considered<br>
success. This cannot be used with system calls that e.g. return a new file<br>
descriptor because the success value is somewhat unpredictable.<br>
<br>
Redesign TST_RETRY_FUNC() to accept arbitrary macro/function ECHCK as the second<br>
parameter for validating the FUNC return value.<br>
- The loop will end succesfully if ECHCK(ret) evaluates to non-zero.<br>
- The loop will fall through on timeout instead of calling tst_brk().<br>
- errno will be cleared before every FUNC call.<br>
- Add standard check macros for the most common call conventions:<br>
  - TST_RETVAL_EQ0(x) - x == 0<br>
  - TST_RETVAL_NOTNULL(x) - x != 0 or x != NULL<br>
  - TST_RETVAL_GE0(x) - x >= 0</blockquote><div><br></div><div><div class="gmail_default" style="font-size:small">Nice to see this enhancement! Few comments as below:</div><br></div><div><div class="gmail_default" style="font-size:small">1. We need to update the doc/test-writing-guidelines.txt too.</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">2. Maybe better to let the shell version is consistent with this new?</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">3. I remember there were discussions to support enabling infinite loop in TST_RETRY_FUNC, but not sure if it is possible to add in this patch, or we can do that after your patch merged.</div></div><div class="gmail_default" style="font-size:small"><a href="http://lists.linux.it/pipermail/ltp/2019-October/013896.html">http://lists.linux.it/pipermail/ltp/2019-October/013896.html</a><br></div><div class="gmail_default" style="font-size:small"><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<span class="gmail_default" style="font-size:small">...</span><br>
        sprintf(defunct_tid_path, "/proc/%d/task/%d", getpid(), defunct_tid);<br>
-       TST_RETRY_FN_EXP_BACKOFF(access(defunct_tid_path, R_OK), -1, 15);<br>
+       ret = TST_RETRY_FN_EXP_BACKOFF(access(defunct_tid_path, R_OK),<br>
+               CHECK_ENOENT, 15);<br></blockquote><div><br></div><div><div class="gmail_default" style="font-size:small">The test total timeout is set to 20 seconds, here reserve 15 seconds is too much for the macro looping because doing exponential backoff in 15secs(1us+2us+4us+..) actually larger than the 20secs. So I suggest raising the tst_test.timeout at the same time or set a smaller value to MAX_DELAY.</div></div><div><br></div></div>-- <br><div dir="ltr"><div dir="ltr"><div>Regards,<br></div><div>Li Wang<br></div></div></div></div>