[LTP] [PATCH v3 1/2] tst_device.c: Add tst_is_mounted_ro/w check mount option
Li Wang
liwang@redhat.com
Fri Aug 22 07:42:47 CEST 2025
Once we created the more generic function tst_mount_has_opt(),
the tst_is_mounted() could be simply rewritten in:
(We/I can do this in a separate patch)
int tst_is_mounted(const char *path)
{
int ret = tst_mount_has_opt(path, NULL);
if (!ret)
tst_resm(TINFO, "No device is mounted at %s", path);
return ret;
}
On Fri, Aug 22, 2025 at 12:05 PM Wei Gao <wegao@suse.com> wrote:
> Signed-off-by: Wei Gao <wegao@suse.com>
> ---
> include/tst_device.h | 2 ++
> lib/tst_device.c | 42 ++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 44 insertions(+)
>
> diff --git a/include/tst_device.h b/include/tst_device.h
> index 2597fb4e2..3ea7b5500 100644
> --- a/include/tst_device.h
> +++ b/include/tst_device.h
> @@ -34,6 +34,8 @@ int tst_umount(const char *path);
> */
> int tst_is_mounted(const char *path);
> int tst_is_mounted_at_tmpdir(const char *path);
> +int tst_is_mounted_ro(const char *path);
> +int tst_is_mounted_rw(const char *path);
>
> /*
> * Clears a first few blocks of the device. This is needed when device has
> diff --git a/lib/tst_device.c b/lib/tst_device.c
> index 6d1abf065..34f24be7d 100644
> --- a/lib/tst_device.c
> +++ b/lib/tst_device.c
> @@ -473,6 +473,48 @@ int tst_is_mounted_at_tmpdir(const char *path)
> return tst_is_mounted(mpath);
> }
>
> +static int tst_mount_has_opt(const char *path, const char *opt)
> +{
> + char line[PATH_MAX];
> + FILE *file;
> + int ret = 0;
> +
> + file = SAFE_FOPEN(NULL, "/proc/mounts", "r");
> +
> + while (fgets(line, sizeof(line), file)) {
> + char mount_point[PATH_MAX], options[PATH_MAX];
> +
> + if (sscanf(line, "%*s %s %*s %s", mount_point, options) <
> 2)
> + continue;
> +
> + if (strcmp(mount_point, path) != 0)
> + continue;
> +
> + char *tok = strtok(options, ",");
> + while (tok) {
> + if (strcmp(tok, opt) == 0) {
> + ret = 1;
> + break;
> + }
> + tok = strtok(NULL, ",");
> + }
> + if (ret)
> + break;
> + }
> +
> + return ret;
> +}
> +
> +int tst_is_mounted_ro(const char *path)
> +{
> + return tst_mount_has_opt(path, "ro");
> +}
> +
> +int tst_is_mounted_rw(const char *path)
> +{
> + return tst_mount_has_opt(path, "rw");
> +}
> +
> static int find_stat_file(const char *dev, char *path, size_t path_len)
> {
> const char *devname = strrchr(dev, '/') + 1;
> --
> 2.43.0
>
>
--
Regards,
Li Wang
More information about the ltp
mailing list