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
next prev 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 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.