Linux Test Project
 help / color / mirror / Atom feed
From: Avinesh Kumar <akumar@suse.de>
To: Li Wang <liwang@redhat.com>
Cc: Luis Chamberlain <mcgrof@kernel.org>,
	Christoph Hellwig <hch@lst.de>,
	ltp@lists.linux.it, Hannes Reinecke <hare@suse.de>
Subject: Re: [LTP] [PATCH v4] ioctl_loop06: update loopback block size validation
Date: Fri, 11 Apr 2025 10:38:18 +0200	[thread overview]
Message-ID: <5894423.DvuYhMxLoT@thinkpad> (raw)
In-Reply-To: <20250314115848.173676-1-liwang@redhat.com>

On Friday, March 14, 2025 12:58:48 PM CEST Li Wang wrote:
> The kernel commit 47dd6753 ("block/bdev: lift block size restrictions to 64k")
> now supports block sizes larger than PAGE_SIZE, with a new upper limit of
> BLK_MAX_BLOCK_SIZE (64K). But ioctl_loop06 still assumes that PAGE_SIZE is the
> maximum allowed block size, causing failures on newer kernels(>= 6.14):
> 
>   ioctl_loop06.c:74: TINFO: Using LOOP_SET_BLOCK_SIZE with arg > PAGE_SIZE
>   ioctl_loop06.c:57: TFAIL: Set block size succeed unexpectedly
>   ...
>   ioctl_loop06.c:74: TINFO: Using LOOP_CONFIGURE with block_size > PAGE_SIZE
>   ioctl_loop06.c:57: TFAIL: Set block size succeed unexpectedly
> 
> This patch updates ioctl_loop06 to use BLK_MAX_BLOCK_SIZE instead of PAGE_SIZE
> for block size validation.
> 
> And, dynamically sets bs based on BLK_MAX_BLOCK_SIZE, using 1024 bytes if it's
> below 1MB or scaling it otherwise. Ensures tst_fill_file() writes efficiently
> while maintaining compatibility across different kernel versions.
> 
> Signed-off-by: Li Wang <liwang@redhat.com>
> Cc: Luis Chamberlain <mcgrof@kernel.org>
> Cc: Christoph Hellwig <hch@lst.de>
> Cc: Hannes Reinecke <hare@suse.de>

Tested-by: Avinesh Kumar <akumar@suse.de>

tst_tmpdir.c:316: TINFO: Using /tmp/LTP_iocxHZLn0 as tmpdir (tmpfs filesystem)
tst_test.c:1905: TINFO: LTP version: 20250130
tst_test.c:1909: TINFO: Tested kernel: 6.15.0-rc1-1.ge4c97fd-default #1 SMP PREEMPT_DYNAMIC Mon Apr  7 21:58:09 UTC 2025 (e4c97fd) x86_64
tst_kconfig.c:88: TINFO: Parsing kernel config '/proc/config.gz'
tst_kconfig.c:676: TINFO: CONFIG_FAULT_INJECTION kernel option detected which might slow the execution
tst_test.c:1722: TINFO: Overall timeout per run is 0h 02m 00s
tst_device.c:98: TINFO: Found free device 1 '/dev/loop1'
ioctl_loop06_new.c:76: TINFO: Using LOOP_SET_BLOCK_SIZE with arg < 512
ioctl_loop06_new.c:67: TPASS: Set block size failed as expected: EINVAL (22)
ioctl_loop06_new.c:76: TINFO: Using LOOP_SET_BLOCK_SIZE with arg > BLK_MAX_BLOCK_SIZE
ioctl_loop06_new.c:67: TPASS: Set block size failed as expected: EINVAL (22)
ioctl_loop06_new.c:76: TINFO: Using LOOP_SET_BLOCK_SIZE with arg != power_of_2
ioctl_loop06_new.c:67: TPASS: Set block size failed as expected: EINVAL (22)
ioctl_loop06_new.c:76: TINFO: Using LOOP_CONFIGURE with block_size < 512
tst_device.c:255: TINFO: ioctl return: 0: ECHILD (10)
tst_device.c:255: TINFO: ioctl return: 0: ECHILD (10)
tst_device.c:255: TINFO: ioctl return: -1: ENXIO (6)
ioctl_loop06_new.c:67: TPASS: Set block size failed as expected: EINVAL (22)
ioctl_loop06_new.c:76: TINFO: Using LOOP_CONFIGURE with block_size > BLK_MAX_BLOCK_SIZE
ioctl_loop06_new.c:67: TPASS: Set block size failed as expected: EINVAL (22)
ioctl_loop06_new.c:76: TINFO: Using LOOP_CONFIGURE with block_size != power_of_2
ioctl_loop06_new.c:67: TPASS: Set block size failed as expected: EINVAL (22)

Summary:
passed   6
failed   0
broken   0
skipped  0
warnings 0

> ---
>  configure.ac                                  |  1 +
>  include/lapi/blkdev.h                         | 19 +++++++++++++++++++
>  .../kernel/syscalls/ioctl/ioctl_loop06.c      | 12 ++++++++----
>  3 files changed, 28 insertions(+), 4 deletions(-)
>  create mode 100644 include/lapi/blkdev.h
> 
> diff --git a/configure.ac b/configure.ac
> index 0f2b6f332..5538d88d5 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -52,6 +52,7 @@ AC_CHECK_HEADERS_ONCE([ \
>      emmintrin.h \
>      ifaddrs.h \
>      keyutils.h \
> +    linux/blkdev.h \
>      linux/can.h \
>      linux/cgroupstats.h \
>      linux/cryptouser.h \
> diff --git a/include/lapi/blkdev.h b/include/lapi/blkdev.h
> new file mode 100644
> index 000000000..3ee058ce0
> --- /dev/null
> +++ b/include/lapi/blkdev.h
> @@ -0,0 +1,19 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (c) 2025 Linux Test Project
> + *  Li Wang <liwang@redhat.com>
> + */
> +
> +#ifndef LAPI_BLKDEV_H__
> +#define LAPI_BLKDEV_H__
> +
> +#ifdef HAVE_LINUX_BLKDEV_H
> +#include <linux/blkdev.h>
> +#endif
> +
> +/* Define BLK_MAX_BLOCK_SIZE for older kernels */
> +#ifndef BLK_MAX_BLOCK_SIZE
> +#define BLK_MAX_BLOCK_SIZE 0x00010000 /* 64K */
> +#endif
> +
> +#endif /* LAPI_BLKDEV_H */
> diff --git a/testcases/kernel/syscalls/ioctl/ioctl_loop06.c b/testcases/kernel/syscalls/ioctl/ioctl_loop06.c
> index 573871bc1..35e9e79e9 100644
> --- a/testcases/kernel/syscalls/ioctl/ioctl_loop06.c
> +++ b/testcases/kernel/syscalls/ioctl/ioctl_loop06.c
> @@ -14,7 +14,9 @@
>  #include <unistd.h>
>  #include <sys/types.h>
>  #include <stdlib.h>
> +#include "lapi/blkdev.h"
>  #include "lapi/loop.h"
> +#include "tst_fs.h"
>  #include "tst_test.h"
>  
>  static char dev_path[1024];
> @@ -31,7 +33,7 @@ static struct tcase {
>  	"Using LOOP_SET_BLOCK_SIZE with arg < 512"},
>  
>  	{&invalid_value, LOOP_SET_BLOCK_SIZE,
> -	"Using LOOP_SET_BLOCK_SIZE with arg > PAGE_SIZE"},
> +	"Using LOOP_SET_BLOCK_SIZE with arg > BLK_MAX_BLOCK_SIZE"},
>  
>  	{&unalign_value, LOOP_SET_BLOCK_SIZE,
>  	"Using LOOP_SET_BLOCK_SIZE with arg != power_of_2"},
> @@ -40,7 +42,7 @@ static struct tcase {
>  	"Using LOOP_CONFIGURE with block_size < 512"},
>  
>  	{&invalid_value, LOOP_CONFIGURE,
> -	"Using LOOP_CONFIGURE with block_size > PAGE_SIZE"},
> +	"Using LOOP_CONFIGURE with block_size > BLK_MAX_BLOCK_SIZE"},
>  
>  	{&unalign_value, LOOP_CONFIGURE,
>  	"Using LOOP_CONFIGURE with block_size != power_of_2"},
> @@ -103,10 +105,12 @@ static void setup(void)
>  	if (dev_num < 0)
>  		tst_brk(TBROK, "Failed to find free loop device");
>  
> -	tst_fill_file("test.img", 0, 1024, 1024);
> +	size_t bs = (BLK_MAX_BLOCK_SIZE < TST_MB) ? 1024 : 4 * BLK_MAX_BLOCK_SIZE / 1024;
> +	tst_fill_file("test.img", 0, bs, 1024);
> +
>  	half_value = 256;
>  	pg_size = getpagesize();
> -	invalid_value = pg_size * 2 ;
> +	invalid_value = BLK_MAX_BLOCK_SIZE * 2;
>  	unalign_value = pg_size - 1;
>  
>  	dev_fd = SAFE_OPEN(dev_path, O_RDWR);
> 





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

  parent reply	other threads:[~2025-04-11  8:38 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-13  9:24 [LTP] [PATCH v2] ioctl_loop06: update loopback block size validation Li Wang
2025-03-13 22:59 ` Luis Chamberlain via ltp
2025-03-14  2:24   ` Li Wang
2025-03-14  2:31     ` [LTP] [PATCH v3] " Li Wang
2025-03-14 11:58       ` [LTP] [PATCH v4] " Li Wang
2025-03-14 13:48         ` Petr Vorel
2025-04-11  8:38         ` Avinesh Kumar [this message]
2025-04-11 10:08           ` Li Wang via ltp
2025-03-14  5:52     ` [LTP] [PATCH v2] " Luis Chamberlain via ltp
2025-03-14  5:57       ` Luis Chamberlain via ltp
2025-03-14  6:49         ` Li Wang
2025-03-14  6:47       ` Li Wang

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=5894423.DvuYhMxLoT@thinkpad \
    --to=akumar@suse.de \
    --cc=hare@suse.de \
    --cc=hch@lst.de \
    --cc=liwang@redhat.com \
    --cc=ltp@lists.linux.it \
    --cc=mcgrof@kernel.org \
    /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