diff mbox series

fallocate03: FALLOC_FL_PUNCH_HOLE must be used with FALLOC_FL_KEEP_SIZE

Message ID 20240626010532.2845919-1-samasth.norway.ananda@oracle.com
State New
Headers show
Series fallocate03: FALLOC_FL_PUNCH_HOLE must be used with FALLOC_FL_KEEP_SIZE | expand

Commit Message

Samasth Norway Ananda June 26, 2024, 1:05 a.m. UTC
The fallocate03 ltp test fails with "failed: EOPNOTSUPP" if we just use
FALLOC_FL_KEEP_SIZE for the mode instead of ORing it with
FALLOC_FL_PUNCH_HOLE.

Signed-off-by: Samasth Norway Ananda <samasth.norway.ananda@oracle.com>
---
 testcases/kernel/syscalls/fallocate/fallocate03.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

Comments

Li Wang July 4, 2024, 7:53 a.m. UTC | #1
Hi Samasth,

Sorry for the late reply, base on your test failure, which kernel version
and
FS-type did you use?

From the fallocate() manual, I see that:
  "The FALLOC_FL_PUNCH_HOLE flag must be ORed with FALLOC_FL_KEEP_SIZE in
mode"

But it doesn't mean we wouldn't use FALLOC_FL_KEEP_SIZE singly in this test.



On Wed, Jun 26, 2024 at 9:06 AM Samasth Norway Ananda via ltp <
ltp@lists.linux.it> wrote:

> The fallocate03 ltp test fails with "failed: EOPNOTSUPP" if we just use
> FALLOC_FL_KEEP_SIZE for the mode instead of ORing it with
> FALLOC_FL_PUNCH_HOLE.
>
> Signed-off-by: Samasth Norway Ananda <samasth.norway.ananda@oracle.com>
> ---
>  testcases/kernel/syscalls/fallocate/fallocate03.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/testcases/kernel/syscalls/fallocate/fallocate03.c
> b/testcases/kernel/syscalls/fallocate/fallocate03.c
> index b3e6b3817..20ce13cd4 100644
> --- a/testcases/kernel/syscalls/fallocate/fallocate03.c
> +++ b/testcases/kernel/syscalls/fallocate/fallocate03.c
> @@ -30,10 +30,10 @@ static struct test_case {
>         {DEFAULT_MODE, BLOCKS_WRITTEN},
>         {DEFAULT_MODE, BLOCKS_WRITTEN + HOLE_SIZE_IN_BLOCKS / 2 - 1},
>         {DEFAULT_MODE, BLOCKS_WRITTEN + HOLE_SIZE_IN_BLOCKS + 1},
> -       {FALLOC_FL_KEEP_SIZE, 2},
> -       {FALLOC_FL_KEEP_SIZE, BLOCKS_WRITTEN},
> -       {FALLOC_FL_KEEP_SIZE, BLOCKS_WRITTEN + HOLE_SIZE_IN_BLOCKS / 2 +
> 1},
> -       {FALLOC_FL_KEEP_SIZE, BLOCKS_WRITTEN + HOLE_SIZE_IN_BLOCKS + 2}
> +       {FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, 2},
> +       {FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, BLOCKS_WRITTEN},
> +       {FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, BLOCKS_WRITTEN +
> HOLE_SIZE_IN_BLOCKS / 2 + 1},
> +       {FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, BLOCKS_WRITTEN +
> HOLE_SIZE_IN_BLOCKS + 2}
>  };
>
>  static int block_size;
> @@ -82,7 +82,7 @@ static void verify_fallocate(unsigned int nr)
>         TST_EXP_PASS(
>                 fallocate(fd, tc->mode, tc->offset * block_size,
> block_size),
>                 "fallocate(fd, %s, %ld, %d)",
> -               tc->mode ? "FALLOC_FL_KEEP_SIZE" : "DEFAULT_MODE",
> +               tc->mode ? "FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE" :
> "DEFAULT_MODE",
>                 tc->offset * block_size, block_size);
>  }
>
> --
> 2.45.2
>
>
> --
> Mailing list info: https://lists.linux.it/listinfo/ltp
>
>
cel--- via ltp July 23, 2024, 5:55 p.m. UTC | #2
On 7/4/24 12:53 AM, Li Wang wrote:
> Hi Samasth,
> 
> Sorry for the late reply, base on your test failure, which kernel 
> version and
> FS-type did you use?
> 

Li, I am using the v6.10 kernel and the FS-type is nfsvers=4.2. The 
fallocate() call is only supported over NFSv4.2 and should show a proper 
message when run over NFSv4.1 or below.

The output I get on NFSv4.2 is

<<<test_output>>>
incrementing stop
tst_test.c:1733: TINFO: LTP version: 20220121-1963-g830a705d6
tst_test.c:1617: TINFO: Timeout per run is 0h 00m 30s
fallocate03.c:83: TPASS: fallocate(fd, DEFAULT_MODE, 2097152, 1048576) 
passed
fallocate03.c:83: TPASS: fallocate(fd, DEFAULT_MODE, 12582912, 1048576) 
passed
fallocate03.c:83: TPASS: fallocate(fd, DEFAULT_MODE, 17825792, 1048576) 
passed
fallocate03.c:83: TPASS: fallocate(fd, DEFAULT_MODE, 26214400, 1048576) 
passed
fallocate03.c:83: TFAIL: fallocate(fd, FALLOC_FL_KEEP_SIZE, 2097152, 
1048576) failed: EOPNOTSUPP (95)
fallocate03.c:83: TFAIL: fallocate(fd, FALLOC_FL_KEEP_SIZE, 12582912, 
1048576) failed: EOPNOTSUPP (95)
fallocate03.c:83: TFAIL: fallocate(fd, FALLOC_FL_KEEP_SIZE, 19922944, 
1048576) failed: EOPNOTSUPP (95)
fallocate03.c:83: TFAIL: fallocate(fd, FALLOC_FL_KEEP_SIZE, 27262976, 
1048576) failed: EOPNOTSUPP (95)

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

When I run it on NFSv4.1 or below all the tests fail with EOPNOTSUPP.

>  From the fallocate() manual, I see that:
> "The FALLOC_FL_PUNCH_HOLE flag must be ORed withFALLOC_FL_KEEP_SIZE in mode"
> 
> But it doesn't mean we wouldn't use FALLOC_FL_KEEP_SIZE singly in this test.

Oh okay. Sorry mistook that.

Thanks,
Samasth.

> 
> 
> 
> On Wed, Jun 26, 2024 at 9:06 AM Samasth Norway Ananda via ltp 
> <ltp@lists.linux.it <mailto:ltp@lists.linux.it>> wrote:
> 
>     The fallocate03 ltp test fails with "failed: EOPNOTSUPP" if we just use
>     FALLOC_FL_KEEP_SIZE for the mode instead of ORing it with
>     FALLOC_FL_PUNCH_HOLE.
> 
>     Signed-off-by: Samasth Norway Ananda
>     <samasth.norway.ananda@oracle.com
>     <mailto:samasth.norway.ananda@oracle.com>>
>     ---
>       testcases/kernel/syscalls/fallocate/fallocate03.c | 10 +++++-----
>       1 file changed, 5 insertions(+), 5 deletions(-)
> 
>     diff --git a/testcases/kernel/syscalls/fallocate/fallocate03.c
>     b/testcases/kernel/syscalls/fallocate/fallocate03.c
>     index b3e6b3817..20ce13cd4 100644
>     --- a/testcases/kernel/syscalls/fallocate/fallocate03.c
>     +++ b/testcases/kernel/syscalls/fallocate/fallocate03.c
>     @@ -30,10 +30,10 @@ static struct test_case {
>              {DEFAULT_MODE, BLOCKS_WRITTEN},
>              {DEFAULT_MODE, BLOCKS_WRITTEN + HOLE_SIZE_IN_BLOCKS / 2 - 1},
>              {DEFAULT_MODE, BLOCKS_WRITTEN + HOLE_SIZE_IN_BLOCKS + 1},
>     -       {FALLOC_FL_KEEP_SIZE, 2},
>     -       {FALLOC_FL_KEEP_SIZE, BLOCKS_WRITTEN},
>     -       {FALLOC_FL_KEEP_SIZE, BLOCKS_WRITTEN + HOLE_SIZE_IN_BLOCKS /
>     2 + 1},
>     -       {FALLOC_FL_KEEP_SIZE, BLOCKS_WRITTEN + HOLE_SIZE_IN_BLOCKS + 2}
>     +       {FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, 2},
>     +       {FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, BLOCKS_WRITTEN},
>     +       {FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, BLOCKS_WRITTEN
>     + HOLE_SIZE_IN_BLOCKS / 2 + 1},
>     +       {FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, BLOCKS_WRITTEN
>     + HOLE_SIZE_IN_BLOCKS + 2}
>       };
> 
>       static int block_size;
>     @@ -82,7 +82,7 @@ static void verify_fallocate(unsigned int nr)
>              TST_EXP_PASS(
>                      fallocate(fd, tc->mode, tc->offset * block_size,
>     block_size),
>                      "fallocate(fd, %s, %ld, %d)",
>     -               tc->mode ? "FALLOC_FL_KEEP_SIZE" : "DEFAULT_MODE",
>     +               tc->mode ? "FALLOC_FL_KEEP_SIZE |
>     FALLOC_FL_PUNCH_HOLE" : "DEFAULT_MODE",
>                      tc->offset * block_size, block_size);
>       }
> 
>     -- 
>     2.45.2
> 
> 
>     -- 
>     Mailing list info: https://lists.linux.it/listinfo/ltp
>     <https://urldefense.com/v3/__https://lists.linux.it/listinfo/ltp__;!!ACWV5N9M2RV99hQ!ImURCv7bX_N4cHEQ60yHgML0NBIqYcjPdJN4Kot4Ia6o9rBb2TwedwyR0Q1WyZ-I-NCjXyaf_i-Fe-L2h5O7mf4$>
> 
> 
> 
> -- 
> Regards,
> Li Wang
diff mbox series

Patch

diff --git a/testcases/kernel/syscalls/fallocate/fallocate03.c b/testcases/kernel/syscalls/fallocate/fallocate03.c
index b3e6b3817..20ce13cd4 100644
--- a/testcases/kernel/syscalls/fallocate/fallocate03.c
+++ b/testcases/kernel/syscalls/fallocate/fallocate03.c
@@ -30,10 +30,10 @@  static struct test_case {
 	{DEFAULT_MODE, BLOCKS_WRITTEN},
 	{DEFAULT_MODE, BLOCKS_WRITTEN + HOLE_SIZE_IN_BLOCKS / 2 - 1},
 	{DEFAULT_MODE, BLOCKS_WRITTEN + HOLE_SIZE_IN_BLOCKS + 1},
-	{FALLOC_FL_KEEP_SIZE, 2},
-	{FALLOC_FL_KEEP_SIZE, BLOCKS_WRITTEN},
-	{FALLOC_FL_KEEP_SIZE, BLOCKS_WRITTEN + HOLE_SIZE_IN_BLOCKS / 2 + 1},
-	{FALLOC_FL_KEEP_SIZE, BLOCKS_WRITTEN + HOLE_SIZE_IN_BLOCKS + 2}
+	{FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, 2},
+	{FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, BLOCKS_WRITTEN},
+	{FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, BLOCKS_WRITTEN + HOLE_SIZE_IN_BLOCKS / 2 + 1},
+	{FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, BLOCKS_WRITTEN + HOLE_SIZE_IN_BLOCKS + 2}
 };
 
 static int block_size;
@@ -82,7 +82,7 @@  static void verify_fallocate(unsigned int nr)
 	TST_EXP_PASS(
 		fallocate(fd, tc->mode, tc->offset * block_size, block_size),
 		"fallocate(fd, %s, %ld, %d)",
-		tc->mode ? "FALLOC_FL_KEEP_SIZE" : "DEFAULT_MODE",
+		tc->mode ? "FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE" : "DEFAULT_MODE",
 		tc->offset * block_size, block_size);
 }