[LTP] [PATCH] tst_device: Scan /sys/block/* for stat file
Yang Xu
xuyang2018.jy@cn.fujitsu.com
Thu Jan 9 10:03:45 CET 2020
Hi
> The current tst_dev_bytes_written() function works only for simple cases
> where the block device is not divided into partitions. This patch fixes
> that scannning the sysfiles for pattern /sys/block/*/devname/stat.
>
> Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
> CC: Yang Xu <xuyang2018.jy@cn.fujitsu.com>
> CC: Sumit Garg <sumit.garg@linaro.org>
> ---
> lib/tst_device.c | 33 ++++++++++++++++++++++++++++-----
> 1 file changed, 28 insertions(+), 5 deletions(-)
>
> diff --git a/lib/tst_device.c b/lib/tst_device.c
> index 10f71901d..aca769559 100644
> --- a/lib/tst_device.c
> +++ b/lib/tst_device.c
> @@ -373,16 +373,39 @@ int tst_umount(const char *path)
> return -1;
> }
>
> +int find_stat_file(const char *dev, char *path, size_t path_len)
> +{
> + const char *devname = strrchr(dev, '/') + 1;
> +
> + snprintf(path, path_len, "/sys/block/%s/stat", devname);
> +
> + if (!access(path, F_OK))
> + return 1;
> +
> + DIR *dir = SAFE_OPENDIR(NULL, "/sys/block/");
> + struct dirent *ent;
> +
> + while ((ent = readdir(dir))) {
> + snprintf(path, path_len, "/sys/block/%s/%s/stat", ent->d_name, devname);
> +
> + fprintf(stderr, "%s\n", path);
> +
It will make many noise when using .all_filesystem and we can remove it.
Other than, it looks good to me.
> + if (!access(path, F_OK)) {
> + SAFE_CLOSEDIR(NULL, dir);
> + return 1;
> + }
> + }
> +
> + SAFE_CLOSEDIR(NULL, dir);
> + return 0;
> +}
> +
> unsigned long tst_dev_bytes_written(const char *dev)
> {
> - struct stat st;
> unsigned long dev_sec_write = 0, dev_bytes_written, io_ticks = 0;
> char dev_stat_path[1024];
>
> - snprintf(dev_stat_path, sizeof(dev_stat_path), "/sys/block/%s/stat",
> - strrchr(dev, '/') + 1);
> -
> - if (stat(dev_stat_path, &st) != 0)
> + if (!find_stat_file(dev, dev_stat_path, sizeof(dev_stat_path)))
> tst_brkm(TCONF, NULL, "Test device stat file: %s not found",
> dev_stat_path);
>
>
More information about the ltp
mailing list