Linux Test Project
 help / color / mirror / Atom feed
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

  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