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