]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
selftests: always check mask returned by statmount(2)
authorMiklos Szeredi <mszeredi@redhat.com>
Wed, 29 Jan 2025 16:06:41 +0000 (17:06 +0100)
committerChristian Brauner <brauner@kernel.org>
Fri, 7 Feb 2025 09:27:26 +0000 (10:27 +0100)
STATMOUNT_MNT_OPTS can actually be missing if there are no options.  This
is a change of behavior since 75ead69a7173 ("fs: don't let statmount return
empty strings").

The other checks shouldn't actually trigger, but add them for correctness
and for easier debugging if the test fails.

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Link: https://lore.kernel.org/r/20250129160641.35485-1-mszeredi@redhat.com
Signed-off-by: Christian Brauner <brauner@kernel.org>
tools/testing/selftests/filesystems/statmount/statmount_test.c

index 8eb6aa606a0d5ed857b6dc1dda941ad34432e5bf..46d289611ce86d8dab9cd8c7a54eff8e52d847e9 100644 (file)
@@ -383,6 +383,10 @@ static void test_statmount_mnt_point(void)
                return;
        }
 
+       if (!(sm->mask & STATMOUNT_MNT_POINT)) {
+               ksft_test_result_fail("missing STATMOUNT_MNT_POINT in mask\n");
+               return;
+       }
        if (strcmp(sm->str + sm->mnt_point, "/") != 0) {
                ksft_test_result_fail("unexpected mount point: '%s' != '/'\n",
                                      sm->str + sm->mnt_point);
@@ -408,6 +412,10 @@ static void test_statmount_mnt_root(void)
                                      strerror(errno));
                return;
        }
+       if (!(sm->mask & STATMOUNT_MNT_ROOT)) {
+               ksft_test_result_fail("missing STATMOUNT_MNT_ROOT in mask\n");
+               return;
+       }
        mnt_root = sm->str + sm->mnt_root;
        last_root = strrchr(mnt_root, '/');
        if (last_root)
@@ -437,6 +445,10 @@ static void test_statmount_fs_type(void)
                                      strerror(errno));
                return;
        }
+       if (!(sm->mask & STATMOUNT_FS_TYPE)) {
+               ksft_test_result_fail("missing STATMOUNT_FS_TYPE in mask\n");
+               return;
+       }
        fs_type = sm->str + sm->fs_type;
        for (s = known_fs; s != NULL; s++) {
                if (strcmp(fs_type, *s) == 0)
@@ -464,6 +476,11 @@ static void test_statmount_mnt_opts(void)
                return;
        }
 
+       if (!(sm->mask & STATMOUNT_MNT_BASIC)) {
+               ksft_test_result_fail("missing STATMOUNT_MNT_BASIC in mask\n");
+               return;
+       }
+
        while (getline(&line, &len, f_mountinfo) != -1) {
                int i;
                char *p, *p2;
@@ -514,7 +531,10 @@ static void test_statmount_mnt_opts(void)
                if (p2)
                        *p2 = '\0';
 
-               statmount_opts = sm->str + sm->mnt_opts;
+               if (sm->mask & STATMOUNT_MNT_OPTS)
+                       statmount_opts = sm->str + sm->mnt_opts;
+               else
+                       statmount_opts = "";
                if (strcmp(statmount_opts, p) != 0)
                        ksft_test_result_fail(
                                "unexpected mount options: '%s' != '%s'\n",