* [LTP] [PATCH v2] ioctl_loop06: update loopback block size validation
@ 2025-03-13 9:24 Li Wang
2025-03-13 22:59 ` Luis Chamberlain via ltp
0 siblings, 1 reply; 12+ messages in thread
From: Li Wang @ 2025-03-13 9:24 UTC (permalink / raw)
To: ltp; +Cc: Luis Chamberlain, Christoph Hellwig, Hannes Reinecke
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, we give up the test size between (PAGE_SIZE, BLK_MAX_BLOCK_SIZE) even on
old kernels becase it makes no sense.
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>
---
testcases/kernel/syscalls/ioctl/ioctl_loop06.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/testcases/kernel/syscalls/ioctl/ioctl_loop06.c b/testcases/kernel/syscalls/ioctl/ioctl_loop06.c
index 573871bc1..238a7c6f5 100644
--- a/testcases/kernel/syscalls/ioctl/ioctl_loop06.c
+++ b/testcases/kernel/syscalls/ioctl/ioctl_loop06.c
@@ -17,6 +17,8 @@
#include "lapi/loop.h"
#include "tst_test.h"
+#define BLK_MAX_BLOCK_SIZE 0x00010000 /* SZ_64K */
+
static char dev_path[1024];
static int dev_num, dev_fd, file_fd, attach_flag, loop_configure_sup = 1;
static unsigned int invalid_value, half_value, unalign_value;
@@ -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"},
@@ -106,7 +108,7 @@ static void setup(void)
tst_fill_file("test.img", 0, 1024, 1024);
half_value = 256;
pg_size = getpagesize();
- invalid_value = pg_size * 2 ;
+ invalid_value = BLK_MAX_BLOCK_SIZE + 1;
unalign_value = pg_size - 1;
dev_fd = SAFE_OPEN(dev_path, O_RDWR);
--
2.48.1
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [LTP] [PATCH v2] ioctl_loop06: update loopback block size validation
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
0 siblings, 1 reply; 12+ messages in thread
From: Luis Chamberlain via ltp @ 2025-03-13 22:59 UTC (permalink / raw)
To: Li Wang; +Cc: Christoph Hellwig, ltp, Hannes Reinecke
On Thu, Mar 13, 2025 at 05:24:45PM +0800, 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, we give up the test size between (PAGE_SIZE, BLK_MAX_BLOCK_SIZE) even on
> old kernels becase it makes no sense.
>
> 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>
> ---
> testcases/kernel/syscalls/ioctl/ioctl_loop06.c | 8 +++++---
> 1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/testcases/kernel/syscalls/ioctl/ioctl_loop06.c b/testcases/kernel/syscalls/ioctl/ioctl_loop06.c
> index 573871bc1..238a7c6f5 100644
> --- a/testcases/kernel/syscalls/ioctl/ioctl_loop06.c
> +++ b/testcases/kernel/syscalls/ioctl/ioctl_loop06.c
> @@ -17,6 +17,8 @@
> #include "lapi/loop.h"
> #include "tst_test.h"
>
> +#define BLK_MAX_BLOCK_SIZE 0x00010000 /* SZ_64K */
Today its SZ_64K, tomorrow another value. If you have an ifdef check for
kernel versions it may be good to do that. So if >= v6.15 then 64k
othersize PAGE_SIZE is fine.
> +
> static char dev_path[1024];
> static int dev_num, dev_fd, file_fd, attach_flag, loop_configure_sup = 1;
> static unsigned int invalid_value, half_value, unalign_value;
> @@ -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"},
> @@ -106,7 +108,7 @@ static void setup(void)
> tst_fill_file("test.img", 0, 1024, 1024);
> half_value = 256;
> pg_size = getpagesize();
> - invalid_value = pg_size * 2 ;
> + invalid_value = BLK_MAX_BLOCK_SIZE + 1;
I'd use BLK_MAX_BLOCK_SIZE * 2 as we use power of 2 values;
Luis
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [LTP] [PATCH v2] ioctl_loop06: update loopback block size validation
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 5:52 ` [LTP] [PATCH v2] " Luis Chamberlain via ltp
0 siblings, 2 replies; 12+ messages in thread
From: Li Wang @ 2025-03-14 2:24 UTC (permalink / raw)
To: Luis Chamberlain; +Cc: Christoph Hellwig, ltp, Hannes Reinecke
Hi Luis,
On Fri, Mar 14, 2025 at 6:59 AM Luis Chamberlain <mcgrof@kernel.org> wrote:
> On Thu, Mar 13, 2025 at 05:24:45PM +0800, 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):
>
Well, this sounds like we need to go back to patch v1:
https://lists.linux.it/pipermail/ltp/2025-March/042599.html
Note: LTP has a function tst_kvercmp() for comparing kernel versions.
--
Regards,
Li Wang
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 12+ messages in thread
* [LTP] [PATCH v3] ioctl_loop06: update loopback block size validation
2025-03-14 2:24 ` Li Wang
@ 2025-03-14 2:31 ` Li Wang
2025-03-14 11:58 ` [LTP] [PATCH v4] " Li Wang
2025-03-14 5:52 ` [LTP] [PATCH v2] " Luis Chamberlain via ltp
1 sibling, 1 reply; 12+ messages in thread
From: Li Wang @ 2025-03-14 2:31 UTC (permalink / raw)
To: ltp; +Cc: Luis Chamberlain, Christoph Hellwig, Hannes Reinecke
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. Also adjust failure expectations based on the
running kernel version.
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>
---
Notes:
v2 --> v3:
* adding back the kernel version check to compare max value
* use BLK_MAX_BLOCK_SIZE * 2 as Luis suggestted
testcases/kernel/syscalls/ioctl/ioctl_loop06.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/testcases/kernel/syscalls/ioctl/ioctl_loop06.c b/testcases/kernel/syscalls/ioctl/ioctl_loop06.c
index 573871bc1..be0aa2506 100644
--- a/testcases/kernel/syscalls/ioctl/ioctl_loop06.c
+++ b/testcases/kernel/syscalls/ioctl/ioctl_loop06.c
@@ -17,6 +17,8 @@
#include "lapi/loop.h"
#include "tst_test.h"
+#define BLK_MAX_BLOCK_SIZE 0x00010000 /* SZ_64K */
+
static char dev_path[1024];
static int dev_num, dev_fd, file_fd, attach_flag, loop_configure_sup = 1;
static unsigned int invalid_value, half_value, unalign_value;
@@ -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"},
@@ -106,8 +108,8 @@ static void setup(void)
tst_fill_file("test.img", 0, 1024, 1024);
half_value = 256;
pg_size = getpagesize();
- invalid_value = pg_size * 2 ;
unalign_value = pg_size - 1;
+ invalid_value = (tst_kvercmp(6, 14, 0) < 0) ? pg_size * 2 : BLK_MAX_BLOCK_SIZE * 2;
dev_fd = SAFE_OPEN(dev_path, O_RDWR);
ret = ioctl(dev_fd, LOOP_SET_BLOCK_SIZE, 512);
--
2.48.1
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [LTP] [PATCH v2] ioctl_loop06: update loopback block size validation
2025-03-14 2:24 ` Li Wang
2025-03-14 2:31 ` [LTP] [PATCH v3] " Li Wang
@ 2025-03-14 5:52 ` Luis Chamberlain via ltp
2025-03-14 5:57 ` Luis Chamberlain via ltp
2025-03-14 6:47 ` Li Wang
1 sibling, 2 replies; 12+ messages in thread
From: Luis Chamberlain via ltp @ 2025-03-14 5:52 UTC (permalink / raw)
To: Li Wang; +Cc: Christoph Hellwig, ltp, Hannes Reinecke
On Fri, Mar 14, 2025 at 10:24:52AM +0800, Li Wang wrote:
> Hi Luis,
>
> On Fri, Mar 14, 2025 at 6:59 AM Luis Chamberlain <mcgrof@kernel.org> wrote:
>
> > On Thu, Mar 13, 2025 at 05:24:45PM +0800, 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):
> >
>
> Well, this sounds like we need to go back to patch v1:
> https://lists.linux.it/pipermail/ltp/2025-March/042599.html
>
> Note: LTP has a function tst_kvercmp() for comparing kernel versions.
Close.
BLK_MAX_BLOCK_SIZE may change in the future so the only real way to
test for an invalid block size is having a check for linux/blkdev.h.
I see commit 7c84fa710f75 ("ioprio: use ioprio.h kernel header if it
exists") is an example of using a kernel header file. I think similar
thing can be done to use linux/blkdev.h and if you don't have
HAVE_LINUX_BLKDEV_H then you can define BLK_MAX_BLOCK_SIZE to 64k for
for older kernels.
A more appropriate invalid value would be BLK_MAX_BLOCK_SIZE * 2 as
non power of 2 values will be outright disallowed.
Luis
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [LTP] [PATCH v2] ioctl_loop06: update loopback block size validation
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
1 sibling, 1 reply; 12+ messages in thread
From: Luis Chamberlain via ltp @ 2025-03-14 5:57 UTC (permalink / raw)
To: Li Wang; +Cc: Christoph Hellwig, ltp, Hannes Reinecke
On Thu, Mar 13, 2025 at 10:52:31PM -0700, Luis Chamberlain wrote:
> On Fri, Mar 14, 2025 at 10:24:52AM +0800, Li Wang wrote:
> > Hi Luis,
> >
> > On Fri, Mar 14, 2025 at 6:59 AM Luis Chamberlain <mcgrof@kernel.org> wrote:
> >
> > > On Thu, Mar 13, 2025 at 05:24:45PM +0800, 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):
> > >
> >
> > Well, this sounds like we need to go back to patch v1:
> > https://lists.linux.it/pipermail/ltp/2025-March/042599.html
> >
> > Note: LTP has a function tst_kvercmp() for comparing kernel versions.
>
> Close.
>
> BLK_MAX_BLOCK_SIZE may change in the future so the only real way to
> test for an invalid block size is having a check for linux/blkdev.h.
>
> I see commit 7c84fa710f75 ("ioprio: use ioprio.h kernel header if it
> exists") is an example of using a kernel header file. I think similar
> thing can be done to use linux/blkdev.h and if you don't have
> HAVE_LINUX_BLKDEV_H then you can define BLK_MAX_BLOCK_SIZE to 64k for
> for older kernels.
>
> A more appropriate invalid value would be BLK_MAX_BLOCK_SIZE * 2 as
> non power of 2 values will be outright disallowed.
While at it, be sure to scale tst_fill_file("test.img", 0, 1024, 1024)
(I think that is bs=1024, count=1024, so 1 MiB file size) so that you
take into consideration the BLK_MAX_BLOCK_SIZE so that the file size
will be at least maybe 10 * BLK_MAX_BLOCK_SIZE or something sensible.
Because as soon as we can support a BLK_MAX_BLOCK_SIZE of 2 MiB this
test will also fail again.
Luis
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [LTP] [PATCH v2] ioctl_loop06: update loopback block size validation
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:47 ` Li Wang
1 sibling, 0 replies; 12+ messages in thread
From: Li Wang @ 2025-03-14 6:47 UTC (permalink / raw)
To: Luis Chamberlain; +Cc: Christoph Hellwig, ltp, Hannes Reinecke
On Fri, Mar 14, 2025 at 1:52 PM Luis Chamberlain <mcgrof@kernel.org> wrote:
> On Fri, Mar 14, 2025 at 10:24:52AM +0800, Li Wang wrote:
> > Hi Luis,
> >
> > On Fri, Mar 14, 2025 at 6:59 AM Luis Chamberlain <mcgrof@kernel.org>
> wrote:
> >
> > > On Thu, Mar 13, 2025 at 05:24:45PM +0800, 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):
> > >
> >
> > Well, this sounds like we need to go back to patch v1:
> > https://lists.linux.it/pipermail/ltp/2025-March/042599.html
> >
> > Note: LTP has a function tst_kvercmp() for comparing kernel versions.
>
> Close.
>
> BLK_MAX_BLOCK_SIZE may change in the future so the only real way to
> test for an invalid block size is having a check for linux/blkdev.h.
>
Good point.
> I see commit 7c84fa710f75 ("ioprio: use ioprio.h kernel header if it
> exists") is an example of using a kernel header file. I think similar
> thing can be done to use linux/blkdev.h and if you don't have
> HAVE_LINUX_BLKDEV_H then you can define BLK_MAX_BLOCK_SIZE to 64k for
> for older kernels.
>
To precise, if BLK_MAX_BLOCK_SIZE is undefined (in blkdev.h) in older
kernel (e.g. kernel-6.12) then we define it to 64k.
>
> A more appropriate invalid value would be BLK_MAX_BLOCK_SIZE * 2 as
> non power of 2 values will be outright disallowed.
>
Agreed. Thanks for reviewing.
--
Regards,
Li Wang
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [LTP] [PATCH v2] ioctl_loop06: update loopback block size validation
2025-03-14 5:57 ` Luis Chamberlain via ltp
@ 2025-03-14 6:49 ` Li Wang
0 siblings, 0 replies; 12+ messages in thread
From: Li Wang @ 2025-03-14 6:49 UTC (permalink / raw)
To: Luis Chamberlain; +Cc: Christoph Hellwig, ltp, Hannes Reinecke
On Fri, Mar 14, 2025 at 1:57 PM Luis Chamberlain <mcgrof@kernel.org> wrote:
> On Thu, Mar 13, 2025 at 10:52:31PM -0700, Luis Chamberlain wrote:
> > On Fri, Mar 14, 2025 at 10:24:52AM +0800, Li Wang wrote:
> > > Hi Luis,
> > >
> > > On Fri, Mar 14, 2025 at 6:59 AM Luis Chamberlain <mcgrof@kernel.org>
> wrote:
> > >
> > > > On Thu, Mar 13, 2025 at 05:24:45PM +0800, 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):
> > > >
> > >
> > > Well, this sounds like we need to go back to patch v1:
> > > https://lists.linux.it/pipermail/ltp/2025-March/042599.html
> > >
> > > Note: LTP has a function tst_kvercmp() for comparing kernel versions.
> >
> > Close.
> >
> > BLK_MAX_BLOCK_SIZE may change in the future so the only real way to
> > test for an invalid block size is having a check for linux/blkdev.h.
> >
> > I see commit 7c84fa710f75 ("ioprio: use ioprio.h kernel header if it
> > exists") is an example of using a kernel header file. I think similar
> > thing can be done to use linux/blkdev.h and if you don't have
> > HAVE_LINUX_BLKDEV_H then you can define BLK_MAX_BLOCK_SIZE to 64k for
> > for older kernels.
> >
> > A more appropriate invalid value would be BLK_MAX_BLOCK_SIZE * 2 as
> > non power of 2 values will be outright disallowed.
>
> While at it, be sure to scale tst_fill_file("test.img", 0, 1024, 1024)
> (I think that is bs=1024, count=1024, so 1 MiB file size) so that you
> take into consideration the BLK_MAX_BLOCK_SIZE so that the file size
> will be at least maybe 10 * BLK_MAX_BLOCK_SIZE or something sensible.
>
> Because as soon as we can support a BLK_MAX_BLOCK_SIZE of 2 MiB this
> test will also fail again.
>
Make sense!! I will improve this in the next version, too.
--
Regards,
Li Wang
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 12+ messages in thread
* [LTP] [PATCH v4] ioctl_loop06: update loopback block size validation
2025-03-14 2:31 ` [LTP] [PATCH v3] " Li Wang
@ 2025-03-14 11:58 ` Li Wang
2025-03-14 13:48 ` Petr Vorel
2025-04-11 8:38 ` Avinesh Kumar
0 siblings, 2 replies; 12+ messages in thread
From: Li Wang @ 2025-03-14 11:58 UTC (permalink / raw)
To: ltp; +Cc: Luis Chamberlain, Christoph Hellwig, Hannes Reinecke
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>
---
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);
--
2.48.1
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [LTP] [PATCH v4] ioctl_loop06: update loopback block size validation
2025-03-14 11:58 ` [LTP] [PATCH v4] " Li Wang
@ 2025-03-14 13:48 ` Petr Vorel
2025-04-11 8:38 ` Avinesh Kumar
1 sibling, 0 replies; 12+ messages in thread
From: Petr Vorel @ 2025-03-14 13:48 UTC (permalink / raw)
To: Li Wang; +Cc: Luis Chamberlain, Christoph Hellwig, ltp, Hannes Reinecke
Hi Li,
> 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.
LGTM.
Reviewed-by: Petr Vorel <pvorel@suse.cz>
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [LTP] [PATCH v4] ioctl_loop06: update loopback block size validation
2025-03-14 11:58 ` [LTP] [PATCH v4] " Li Wang
2025-03-14 13:48 ` Petr Vorel
@ 2025-04-11 8:38 ` Avinesh Kumar
2025-04-11 10:08 ` Li Wang via ltp
1 sibling, 1 reply; 12+ messages in thread
From: Avinesh Kumar @ 2025-04-11 8:38 UTC (permalink / raw)
To: Li Wang; +Cc: Luis Chamberlain, Christoph Hellwig, ltp, Hannes Reinecke
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
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [LTP] [PATCH v4] ioctl_loop06: update loopback block size validation
2025-04-11 8:38 ` Avinesh Kumar
@ 2025-04-11 10:08 ` Li Wang via ltp
0 siblings, 0 replies; 12+ messages in thread
From: Li Wang via ltp @ 2025-04-11 10:08 UTC (permalink / raw)
To: Avinesh Kumar; +Cc: Luis Chamberlain, Christoph Hellwig, ltp, Hannes Reinecke
Hi Avinesh, All,
On Fri, Apr 11, 2025 at 4:38 PM Avinesh Kumar <akumar@suse.de> wrote:
> 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>
>
Thanks for testing. I thought this one was merged, but when I checked the
log, it was not.
Anyway, I pushed it now.
--
Regards,
Li Wang
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2025-04-11 10:08 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
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
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox