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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.