public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
From: Cyril Hrubis <chrubis@suse.cz>
To: Wei Gao <wegao@suse.com>
Cc: ltp@lists.linux.it
Subject: Re: [LTP] [PATCH v4] ioctl_fiemap01: New test for fiemap ioctl()
Date: Wed, 6 Nov 2024 11:34:14 +0100	[thread overview]
Message-ID: <ZytGJscp13xbE1_K@yuki.lan> (raw)
In-Reply-To: <20240415114652.22687-1-wegao@suse.com>

Hi!
> +/*\
> + * [Description]
> + *
> + * Verify basic fiemap ioctl.

This should explain better what the test actually does.

We are doing several things here, that should be described including
checks for invalid flags, empty file, and then finally check that we get
sane data extend data from the call in two different situations. These
subtests should be described here.

> + */
> +
> +#include <linux/fs.h>
> +#include <linux/fiemap.h>
> +#include <stdlib.h>
> +#include <sys/statvfs.h>
> +
> +#include "tst_test.h"
> +
> +#define MNTPOINT "mntpoint"
> +#define TESTFILE "testfile"
> +#define NUM_EXTENT 3
> +
> +static void print_extens(struct fiemap *fiemap)
> +{
> +	tst_res(TDEBUG, "File extent count: %u", fiemap->fm_mapped_extents);
> +
> +	for (unsigned int i = 0; i < fiemap->fm_mapped_extents; ++i) {
> +		tst_res(TDEBUG, "Extent %u: Logical offset: %llu, Physical offset: %llu, flags: %u, Length: %llu",
> +				i + 1,
> +				fiemap->fm_extents[i].fe_logical,
> +				fiemap->fm_extents[i].fe_physical,
> +				fiemap->fm_extents[i].fe_flags,
> +				fiemap->fm_extents[i].fe_length);
> +	}
> +}
> +
> +static void check_extent(struct fiemap *fiemap, unsigned int fm_mapped_extents, int index_extents, int fe_flags, unsigned int min_fe_physical, unsigned int fe_length)

Didn't make check complain that this line is too long?

> +{
> +	TST_EXP_EXPR(fiemap->fm_mapped_extents == fm_mapped_extents,
> +		"Check extent fm_mapped_extents is %d", fm_mapped_extents);
> +	TST_EXP_EXPR(fiemap->fm_extents[index_extents].fe_flags & fe_flags,
> +		"Check fe_flags is %d", fe_flags);
> +	TST_EXP_EXPR(fiemap->fm_extents[index_extents].fe_physical >= min_fe_physical,
> +		"Check fe_physical > %d", min_fe_physical);
> +	TST_EXP_EXPR(fiemap->fm_extents[index_extents].fe_length == fe_length,
> +		"Check fe_length is %d", fe_length);
> +}
> +
> +static void verify_ioctl(void)
> +{
> +	int fd;
> +	struct fiemap *fiemap;
> +	struct statvfs fs_info;
> +	unsigned long blk_size;
> +
> +	SAFE_CHDIR(MNTPOINT);
> +	fd = SAFE_OPEN(TESTFILE, O_RDWR | O_CREAT, 0644);
> +
> +	if (statvfs(".", &fs_info) != 0)
> +		tst_brk(TBROK, "statvfs failed");

It would be nicer if we added SAFE_STATVFS() in a separate patch and
then used it here.

> +	blk_size = fs_info.f_bsize;
> +
> +	fiemap = SAFE_MALLOC(sizeof(struct fiemap) + sizeof(struct fiemap_extent) * NUM_EXTENT);
> +	fiemap->fm_start = 0;
> +	fiemap->fm_length = ~0ULL;
> +	fiemap->fm_extent_count = 1;
> +
> +	fiemap->fm_flags = -1;
> +	TST_EXP_FAIL(ioctl(fd, FS_IOC_FIEMAP, fiemap), EBADR);
> +
> +	fiemap->fm_flags =  0;
> +	TST_EXP_PASS(ioctl(fd, FS_IOC_FIEMAP, fiemap));
> +	print_extens(fiemap);
> +	TST_EXP_EXPR(fiemap->fm_mapped_extents == 0,
> +		"Check extent fm_mapped_extents is 0");
                   ^
		   Maybe better "Empty file should have 0 extends mapped"

Or something that actually explains better why it should be 0.

> +	char *buf = SAFE_MALLOC(blk_size);
> +
> +	SAFE_WRITE(SAFE_WRITE_ANY, fd, buf, blk_size);
> +	fiemap->fm_flags = FIEMAP_FLAG_SYNC;
> +	TST_EXP_PASS(ioctl(fd, FS_IOC_FIEMAP, fiemap));
> +	print_extens(fiemap);
> +	check_extent(fiemap, 1, 0, FIEMAP_EXTENT_LAST, 1, blk_size);
> +
> +	fiemap->fm_extent_count = NUM_EXTENT;
> +	SAFE_LSEEK(fd, 2 * blk_size, SEEK_SET);
> +	SAFE_WRITE(SAFE_WRITE_ALL, fd, buf, blk_size);
> +	SAFE_LSEEK(fd, 4 * blk_size, SEEK_SET);
> +	SAFE_WRITE(SAFE_WRITE_ALL, fd, buf, blk_size);
> +	TST_EXP_PASS(ioctl(fd, FS_IOC_FIEMAP, fiemap));
> +	print_extens(fiemap);
> +	check_extent(fiemap, NUM_EXTENT, NUM_EXTENT - 1, FIEMAP_EXTENT_LAST, 1, blk_size);
> +
> +	free(buf);
> +	free(fiemap);
> +	SAFE_CLOSE(fd);
> +	SAFE_UNLINK(TESTFILE);
> +}
> +
> +static struct tst_test test = {
> +	.mount_device = 1,
> +	.mntpoint = MNTPOINT,
> +	.all_filesystems = 1,
> +	.skip_filesystems = (const char *const[]) {
> +		"exfat", "vfat", "ntfs", "tmpfs", NULL
> +	},
> +	.test_all = verify_ioctl,
> +	.needs_root = 1,
> +};
> -- 
> 2.35.3
> 
> 
> -- 
> Mailing list info: https://lists.linux.it/listinfo/ltp

-- 
Cyril Hrubis
chrubis@suse.cz

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

  reply	other threads:[~2024-11-06 10:34 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-18  5:43 [LTP] [PATCH v1] ioctl_fiemap01: New test for fiemap ioctl() Wei Gao via ltp
2024-01-15 15:23 ` Cyril Hrubis
2024-01-18  7:32 ` [LTP] [PATCH v2] " Wei Gao via ltp
2024-02-28 17:07   ` Petr Vorel
2024-03-29  8:28     ` Wei Gao via ltp
2024-03-29 21:32       ` Petr Vorel
2024-03-31  2:15         ` Wei Gao via ltp
2024-03-31  2:17   ` [LTP] [PATCH v3] " Wei Gao via ltp
2024-04-03  9:28     ` Petr Vorel
2024-04-15 10:17       ` Wei Gao via ltp
2024-04-15 12:17         ` Petr Vorel
2024-04-15 11:46     ` [LTP] [PATCH v4] " Wei Gao via ltp
2024-11-06 10:34       ` Cyril Hrubis [this message]
2024-12-12  8:50       ` [LTP] [PATCH v5 0/2] " Wei Gao via ltp
2024-12-12  8:50         ` [LTP] [PATCH v5 1/2] tst_safe_macros.h: Add SAFE_STATVFS Wei Gao via ltp
2025-02-27 16:27           ` Petr Vorel
2025-04-10  5:39             ` Wei Gao via ltp
2024-12-12  8:50         ` [LTP] [PATCH v5 2/2] ioctl_fiemap01: New test for fiemap ioctl() Wei Gao via ltp
2025-02-27 16:43           ` Petr Vorel
2025-04-10  5:31             ` Wei Gao via ltp
2025-04-10  5:49         ` [LTP] [PATCH v6 0/2] " Wei Gao via ltp
2025-04-10  5:49           ` [LTP] [PATCH v6 1/2] tst_safe_macros.h: Add SAFE_STATVFS Wei Gao via ltp
2025-04-11 13:38             ` Petr Vorel
2025-04-10  5:49           ` [LTP] [PATCH v6 2/2] ioctl_fiemap01: New test for fiemap ioctl() Wei Gao via ltp
2025-04-11 15:40             ` Cyril Hrubis
2025-04-15  1:39           ` [LTP] [PATCH v7 0/2] " Wei Gao via ltp
2025-04-15  1:39             ` [LTP] [PATCH v7 1/2] tst_safe_macros.h: Add SAFE_STATVFS Wei Gao via ltp
2025-04-15  1:39             ` [LTP] [PATCH v7 2/2] ioctl_fiemap01: New test for fiemap ioctl() Wei Gao via ltp
2025-04-14 16:02               ` Cyril Hrubis

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=ZytGJscp13xbE1_K@yuki.lan \
    --to=chrubis@suse.cz \
    --cc=ltp@lists.linux.it \
    --cc=wegao@suse.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox