From: Li Wang <li.wang@linux.dev>
To: Wake Liu <wakel@google.com>
Cc: ltp@lists.linux.it
Subject: Re: [LTP] [PATCH v2] lib: Use backoff polling to wait for loop device nodes
Date: Tue, 4 Aug 2026 11:58:33 +0800 [thread overview]
Message-ID: <anFjaQ--3q38-psW@linux.dev> (raw)
In-Reply-To: <20260804015905.74573-1-wakel@google.com>
Hi Wake,
Wake Liu via ltp wrote:
> From: Wake Liu via ltp <ltp@lists.linux.it>
>
> On systems where loop device node creation is asynchronous (such as Android
> containers or systems with slow udev startup), calling stat() or open()
> immediately after LOOP_CTL_GET_FREE can transiently fail because the
> device file (e.g. /dev/loopX) has not been fully populated in time.
>
> Introduce an exponential-backoff retry loop in both
> tst_find_free_loopdev() and tst_attach_device() (starting at 1ms delay,
> doubling each try, capped at 100ms) to wait for the device node to be
> successfully populated.
>
> This improves the robustness of loop device allocations on asynchronous
> virtualized environments while minimizing unnecessary delays on responsive
> systems.
>
> Link: https://lore.kernel.org/ltp/20260803152754.3991113-1-wakel@google.com/
> Signed-off-by: Wake Liu <wakel@google.com>
> ---
> v1 -> v2:
> - Strictly clamp backoff delay to 100ms (prevent overflow exceeding cap).
> - Skip usleep on final loop iteration to avoid unnecessary idle delay.
> - Reduce max attempts to 30 (stat) and 15 (open) to bound worst-case timeout.
>
> lib/tst_device.c | 32 +++++++++++++++++++++++++++-----
>
> diff --git a/lib/tst_device.c b/lib/tst_device.c
> index 744173ffef..19e1a8a25c 100644
> --- a/lib/tst_device.c
> +++ b/lib/tst_device.c
> @@ -82,7 +82,7 @@ static int set_dev_loop_path(int rc, char *path, size_t path_len)
>
> int tst_find_free_loopdev(char *path, size_t path_len)
> {
> - int ctl_fd, dev_fd, rc, i;
> + int ctl_fd, dev_fd, rc, i, path_set;
> struct loop_info loopinfo;
> char buf[PATH_MAX];
>
> @@ -94,8 +94,18 @@ int tst_find_free_loopdev(char *path, size_t path_len)
> if (rc >= 0) {
> if (path) {
> - if (set_dev_loop_path(rc, path, path_len))
> - tst_brkm(TBROK, NULL, "Could not stat loop device %i", rc);
> + unsigned int usec = 1000; /* start with 1ms */
> +
> + for (i = 0; i < 30; i++) {
> + path_set = set_dev_loop_path(rc, path, path_len);
> + if (!path_set)
> + break;
> + if (i < 29) {
> + usleep(usec);
> + usec = usec * 2 < 100000 ? usec * 2 : 100000;
> + }
> + }
LTP has already provided the exponential-backoff macro in tst_common.h
TST_RETRY_FN_EXP_BACKOFF()
Maybe you can reuse it directly?
--
Regards,
Li Wang
--
Mailing list info: https://lists.linux.it/listinfo/ltp
next prev parent reply other threads:[~2026-08-04 4:20 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-03 15:27 [LTP] [PATCH] lib: Use exponential-backoff polling to wait for loop device nodes Wake Liu via ltp
2026-08-03 16:28 ` [LTP] " linuxtestproject.agent
2026-08-04 1:59 ` [LTP] [PATCH v2] lib: Use backoff " Wake Liu via ltp
2026-08-04 3:58 ` Li Wang [this message]
2026-08-04 15:24 ` [LTP] [PATCH v3] " Wake Liu via ltp
2026-08-05 2:24 ` Li Wang
2026-08-05 2:54 ` [LTP] [PATCH v4] " Wake Liu via ltp
2026-08-05 4:09 ` [LTP] " linuxtestproject.agent
2026-08-05 6:53 ` Li Wang
2026-08-05 6:35 ` [LTP] [PATCH v4] " Li Wang
2026-08-05 6:52 ` Andrea Cervesato via ltp
2026-08-05 6:55 ` Andrea Cervesato via ltp
2026-08-05 7:10 ` Li Wang
2026-08-07 10:04 ` [LTP] [PATCH v5] " Wake Liu via ltp
2026-08-07 11:05 ` [LTP] " linuxtestproject.agent
2026-08-07 23:49 ` [LTP] [PATCH v6] " Wake Liu via ltp
2026-08-08 1:32 ` [LTP] " linuxtestproject.agent
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=anFjaQ--3q38-psW@linux.dev \
--to=li.wang@linux.dev \
--cc=ltp@lists.linux.it \
--cc=wakel@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox