Linux Test Project
 help / color / mirror / Atom feed
* [LTP] [PATCH] readahead02: Fall back to the parent disk's BDI for partitions
@ 2026-08-21  6:32 Victor Cheng-Yen Yang via ltp
  2026-08-21  6:53 ` [LTP] " linuxtestproject.agent
  2026-08-25 14:45 ` [LTP] [PATCH] " Andrea Cervesato via ltp
  0 siblings, 2 replies; 3+ messages in thread
From: Victor Cheng-Yen Yang via ltp @ 2026-08-21  6:32 UTC (permalink / raw)
  To: ltp

Partitions (e.g. mmcblk0p3) do not have their own BDI sysfs entry;
the BDI belongs to the parent disk.

In sysfs a partition is a subdirectory of its disk, so retry one
level up. That resolves for every partition naming scheme without
parsing the device name.

Without this fix, setup_readahead_length() silently returns the
default readahead_length, causing lots of readahead() calls per
test case and a multi-hour runtime on MMC-backed FPGA boards.

Signed-off-by: Victor Cheng-Yen Yang <cyyang772@andestech.com>
---
 testcases/kernel/syscalls/readahead/readahead02.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/testcases/kernel/syscalls/readahead/readahead02.c b/testcases/kernel/syscalls/readahead/readahead02.c
index b65213ad0..6707a1c63 100644
--- a/testcases/kernel/syscalls/readahead/readahead02.c
+++ b/testcases/kernel/syscalls/readahead/readahead02.c
@@ -399,8 +399,14 @@ static void setup_readahead_length(void)
 	backing_dev = basename(tmp);
 	sprintf(sys_bdi_ra_path, "/sys/class/block/%s/bdi/read_ahead_kb",
 		backing_dev);
-	if (access(sys_bdi_ra_path, F_OK))
-		return;
+
+	if (access(sys_bdi_ra_path, F_OK)) {
+		/* Partitions use the parent disk's BDI sysfs entry */
+		snprintf(sys_bdi_ra_path, sizeof(sys_bdi_ra_path),
+			"/sys/class/block/%s/../bdi/read_ahead_kb", backing_dev);
+		if (access(sys_bdi_ra_path, F_OK))
+			return;
+	}
 
 	SAFE_FILE_SCANF(sys_bdi_ra_path, "%d", &orig_bdi_limit);
 
-- 
2.34.1


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [LTP] readahead02: Fall back to the parent disk's BDI for partitions
  2026-08-21  6:32 [LTP] [PATCH] readahead02: Fall back to the parent disk's BDI for partitions Victor Cheng-Yen Yang via ltp
@ 2026-08-21  6:53 ` linuxtestproject.agent
  2026-08-25 14:45 ` [LTP] [PATCH] " Andrea Cervesato via ltp
  1 sibling, 0 replies; 3+ messages in thread
From: linuxtestproject.agent @ 2026-08-21  6:53 UTC (permalink / raw)
  To: Victor Cheng-Yen Yang; +Cc: ltp

Hi Victor,

On Fri, 21 Aug 2026, Victor Cheng-Yen Yang wrote:
> readahead02: Fall back to the parent disk's BDI for partitions

> +		snprintf(sys_bdi_ra_path, sizeof(sys_bdi_ra_path),
> +			"/sys/class/block/%s/../bdi/read_ahead_kb", backing_dev);
> +		if (access(sys_bdi_ra_path, F_OK))
> +			return;
> +	}
>
> 	SAFE_FILE_SCANF(sys_bdi_ra_path, "%d", &orig_bdi_limit);
>
> 	if (orig_bdi_limit)
> 		SAFE_FILE_PRINTF(sys_bdi_ra_path, "%d", orig_bdi_limit);

Could restoration track whether the value was read separately from its
numeric value? The kernel accepts zero for read_ahead_kb, so if the parent
BDI starts at zero, setup writes a positive value but cleanup skips the
restore. This leaves the parent and its sibling partitions modified after
the test.

Verdict - Needs revision

---
Note:

The agent can sometimes produce false positives although often its
findings are genuine. If you find issues with the review, please
comment this email or ignore the suggestions.

Regards,
LTP AI Reviewer

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [LTP] [PATCH] readahead02: Fall back to the parent disk's BDI for partitions
  2026-08-21  6:32 [LTP] [PATCH] readahead02: Fall back to the parent disk's BDI for partitions Victor Cheng-Yen Yang via ltp
  2026-08-21  6:53 ` [LTP] " linuxtestproject.agent
@ 2026-08-25 14:45 ` Andrea Cervesato via ltp
  1 sibling, 0 replies; 3+ messages in thread
From: Andrea Cervesato via ltp @ 2026-08-25 14:45 UTC (permalink / raw)
  To: Victor Cheng-Yen Yang; +Cc: ltp

Hi Victor,

> Partitions (e.g. mmcblk0p3) do not have their own BDI sysfs entry;
> the BDI belongs to the parent disk.
> 
> In sysfs a partition is a subdirectory of its disk, so retry one
> level up. That resolves for every partition naming scheme without
> parsing the device name.
> 
> Without this fix, setup_readahead_length() silently returns the
> default readahead_length, causing lots of readahead() calls per
> test case and a multi-hour runtime on MMC-backed FPGA boards.
> 
> Signed-off-by: Victor Cheng-Yen Yang <cyyang772@andestech.com>
> ---
>  testcases/kernel/syscalls/readahead/readahead02.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/testcases/kernel/syscalls/readahead/readahead02.c b/testcases/kernel/syscalls/readahead/readahead02.c
> index b65213ad0..6707a1c63 100644
> --- a/testcases/kernel/syscalls/readahead/readahead02.c
> +++ b/testcases/kernel/syscalls/readahead/readahead02.c
> @@ -399,8 +399,14 @@ static void setup_readahead_length(void)
>  	backing_dev = basename(tmp);
>  	sprintf(sys_bdi_ra_path, "/sys/class/block/%s/bdi/read_ahead_kb",
>  		backing_dev);
> -	if (access(sys_bdi_ra_path, F_OK))
> -		return;
> +
> +	if (access(sys_bdi_ra_path, F_OK)) {
> +		/* Partitions use the parent disk's BDI sysfs entry */
> +		snprintf(sys_bdi_ra_path, sizeof(sys_bdi_ra_path),
> +			"/sys/class/block/%s/../bdi/read_ahead_kb", backing_dev);
> +		if (access(sys_bdi_ra_path, F_OK))
> +			return;
> +	}
>  
>  	SAFE_FILE_SCANF(sys_bdi_ra_path, "%d", &orig_bdi_limit);
>  
> -- 
> 2.34.1
> 
> 
> -- 
> Mailing list info: https://lists.linux.it/listinfo/ltp

you can handle this by using the internal tst_sys_conf_save()
function:

diff --git a/testcases/kernel/syscalls/readahead/readahead02.c b/testcases/kernel/syscalls/readahead/readahead02.c
index b65213ad0..4f201d65d 100644
--- a/testcases/kernel/syscalls/readahead/readahead02.c
+++ b/testcases/kernel/syscalls/readahead/readahead02.c
@@ -47,7 +47,6 @@ static unsigned long cached_max;
 static int ovl_mounted;
 static int readahead_length  = 4096;
 static char sys_bdi_ra_path[PATH_MAX];
-static int orig_bdi_limit;
 
 static const char mntpoint[] = OVL_BASE_MNTPOINT;
 
@@ -388,6 +387,11 @@ static void setup_readahead_length(void)
 	struct stat sbuf;
 	char tmp[PATH_MAX], *backing_dev;
 	int ra_new_limit, ra_limit;
+	struct tst_path_val bdi_ra = {
+		.path = sys_bdi_ra_path,
+		.val = NULL,
+		.flags = TST_SR_TBROK
+	};
 
 	/* Find out backing device name */
 	SAFE_LSTAT(tst_device->dev, &sbuf);
@@ -399,10 +403,16 @@ static void setup_readahead_length(void)
 	backing_dev = basename(tmp);
 	sprintf(sys_bdi_ra_path, "/sys/class/block/%s/bdi/read_ahead_kb",
 		backing_dev);
-	if (access(sys_bdi_ra_path, F_OK))
-		return;
 
-	SAFE_FILE_SCANF(sys_bdi_ra_path, "%d", &orig_bdi_limit);
+	if (access(sys_bdi_ra_path, F_OK)) {
+		/* Partitions use the parent disk's BDI sysfs entry */
+		snprintf(sys_bdi_ra_path, sizeof(sys_bdi_ra_path),
+			"/sys/class/block/%s/../bdi/read_ahead_kb", backing_dev);
+		if (access(sys_bdi_ra_path, F_OK))
+			return;
+	}
+
+	tst_sys_conf_save(&bdi_ra);
 
 	/* raise bdi limit as much as kernel allows */
 	ra_new_limit = testfile_size / 1024;
@@ -446,9 +456,6 @@ static void cleanup(void)
 {
 	if (ovl_mounted)
 		SAFE_UMOUNT(OVL_MNT);
-
-	if (orig_bdi_limit)
-		SAFE_FILE_PRINTF(sys_bdi_ra_path, "%d", orig_bdi_limit);
 }
 
 static struct tst_test test = {



--
Andrea Cervesato
SUSE QE Automation Engineer Linux
andrea.cervesato@suse.com

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-08-25 14:46 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-21  6:32 [LTP] [PATCH] readahead02: Fall back to the parent disk's BDI for partitions Victor Cheng-Yen Yang via ltp
2026-08-21  6:53 ` [LTP] " linuxtestproject.agent
2026-08-25 14:45 ` [LTP] [PATCH] " Andrea Cervesato via ltp

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox