diff mbox

src/seek_sanity_test: fix test15 SEEK_HOLE expected results

Message ID 20170523140618.24387-1-lhenriques@suse.com (mailing list archive)
State New, archived
Headers show

Commit Message

Luis Henriques May 23, 2017, 2:06 p.m. UTC
Filesystesm with the "default behaviour" will always return the offset of
the end of the file when lseek'ing with SEEK_HOLE.  This test does the
following:

 - fallocate 4 << 20 bytes
 - write PAGE_SIZE bytes at offset 0
 - writes PAGE_SIZE bytes at offset 4 << 20

Thus, using lseek in an FS with the "default behaviour" will set the
position at 4 << 20 + PAGE_SIZE.

Cc: Jan Kara <jack@suse.cz>
Signed-off-by: Luis Henriques <lhenriques@suse.com>
---
 src/seek_sanity_test.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--
To unsubscribe from this list: send the line "unsubscribe fstests" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Jan Kara May 23, 2017, 2:21 p.m. UTC | #1
On Tue 23-05-17 15:06:18, Luis Henriques wrote:
> Filesystesm with the "default behaviour" will always return the offset of
> the end of the file when lseek'ing with SEEK_HOLE.  This test does the
> following:
> 
>  - fallocate 4 << 20 bytes
>  - write PAGE_SIZE bytes at offset 0
>  - writes PAGE_SIZE bytes at offset 4 << 20
> 
> Thus, using lseek in an FS with the "default behaviour" will set the
> position at 4 << 20 + PAGE_SIZE.
> 
> Cc: Jan Kara <jack@suse.cz>
> Signed-off-by: Luis Henriques <lhenriques@suse.com>

Thanks for fixing this. You can add:

Reviewed-by: Jan Kara <jack@suse.cz>

								Honza

> ---
>  src/seek_sanity_test.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/src/seek_sanity_test.c b/src/seek_sanity_test.c
> index d52e2b6dab79..b35a324c749c 100644
> --- a/src/seek_sanity_test.c
> +++ b/src/seek_sanity_test.c
> @@ -335,8 +335,8 @@ static int test15(int fd, int testnum)
>  		goto out;
>  
>  	/* offset at the beginning */
> -	ret += do_lseek(testnum,  1, fd, filsz, SEEK_HOLE, 0, bufsz);
> -	ret += do_lseek(testnum,  2, fd, filsz, SEEK_HOLE, 1, bufsz);
> +	ret += do_lseek(testnum,  1, fd, filsz + bufsz, SEEK_HOLE, 0, bufsz);
> +	ret += do_lseek(testnum,  2, fd, filsz + bufsz, SEEK_HOLE, 1, bufsz);
>  	ret += do_lseek(testnum,  3, fd, filsz, SEEK_DATA, 0, 0);
>  	ret += do_lseek(testnum,  4, fd, filsz, SEEK_DATA, 1, 1);
>  	ret += do_lseek(testnum,  5, fd, filsz, SEEK_DATA, bufsz, filsz);
Eryu Guan May 23, 2017, 3:56 p.m. UTC | #2
On Tue, May 23, 2017 at 03:06:18PM +0100, Luis Henriques wrote:
> Filesystesm with the "default behaviour" will always return the offset of
> the end of the file when lseek'ing with SEEK_HOLE.  This test does the
> following:
> 
>  - fallocate 4 << 20 bytes
>  - write PAGE_SIZE bytes at offset 0
>  - writes PAGE_SIZE bytes at offset 4 << 20
> 
> Thus, using lseek in an FS with the "default behaviour" will set the
> position at 4 << 20 + PAGE_SIZE.

Thanks for fixing it! I've tested it on a "default behavior" filesystem
(gfs2) this time, and test passed.

> 
> Cc: Jan Kara <jack@suse.cz>
> Signed-off-by: Luis Henriques <lhenriques@suse.com>
> ---
>  src/seek_sanity_test.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/src/seek_sanity_test.c b/src/seek_sanity_test.c
> index d52e2b6dab79..b35a324c749c 100644
> --- a/src/seek_sanity_test.c
> +++ b/src/seek_sanity_test.c
> @@ -335,8 +335,8 @@ static int test15(int fd, int testnum)
>  		goto out;
>  
>  	/* offset at the beginning */
> -	ret += do_lseek(testnum,  1, fd, filsz, SEEK_HOLE, 0, bufsz);
> -	ret += do_lseek(testnum,  2, fd, filsz, SEEK_HOLE, 1, bufsz);
> +	ret += do_lseek(testnum,  1, fd, filsz + bufsz, SEEK_HOLE, 0, bufsz);
> +	ret += do_lseek(testnum,  2, fd, filsz + bufsz, SEEK_HOLE, 1, bufsz);

I think we should update filsz after the last write, before any
do_lseek() test, because filsz was extended by bufsz and the 4th arg of
do_lseek expects the actual file size.

>  	ret += do_lseek(testnum,  3, fd, filsz, SEEK_DATA, 0, 0);
>  	ret += do_lseek(testnum,  4, fd, filsz, SEEK_DATA, 1, 1);
>  	ret += do_lseek(testnum,  5, fd, filsz, SEEK_DATA, bufsz, filsz);

And the expected result of the 5th test should be 'filsz - bufsz' then.

Thanks,
Eryu

> --
> To unsubscribe from this list: send the line "unsubscribe fstests" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe fstests" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/src/seek_sanity_test.c b/src/seek_sanity_test.c
index d52e2b6dab79..b35a324c749c 100644
--- a/src/seek_sanity_test.c
+++ b/src/seek_sanity_test.c
@@ -335,8 +335,8 @@  static int test15(int fd, int testnum)
 		goto out;
 
 	/* offset at the beginning */
-	ret += do_lseek(testnum,  1, fd, filsz, SEEK_HOLE, 0, bufsz);
-	ret += do_lseek(testnum,  2, fd, filsz, SEEK_HOLE, 1, bufsz);
+	ret += do_lseek(testnum,  1, fd, filsz + bufsz, SEEK_HOLE, 0, bufsz);
+	ret += do_lseek(testnum,  2, fd, filsz + bufsz, SEEK_HOLE, 1, bufsz);
 	ret += do_lseek(testnum,  3, fd, filsz, SEEK_DATA, 0, 0);
 	ret += do_lseek(testnum,  4, fd, filsz, SEEK_DATA, 1, 1);
 	ret += do_lseek(testnum,  5, fd, filsz, SEEK_DATA, bufsz, filsz);