| // SPDX-License-Identifier: GPL-2.0-or-later |
| // Copyright (c) 2024 Christian Brauner <brauner@kernel.org> |
| |
| #define _GNU_SOURCE |
| #include <fcntl.h> |
| #include <sched.h> |
| #include <stdio.h> |
| #include <string.h> |
| #include <sys/stat.h> |
| #include <sys/mount.h> |
| #include <unistd.h> |
| |
| #include "statmount.h" |
| #include "../../kselftest_harness.h" |
| |
| #ifndef LISTMOUNT_REVERSE |
| #define LISTMOUNT_REVERSE (1 << 0) /* List later mounts first */ |
| #endif |
| |
| #define LISTMNT_BUFFER 10 |
| |
| /* Check that all mount ids are in increasing order. */ |
| TEST(listmount_forward) |
| { |
| uint64_t list[LISTMNT_BUFFER], last_mnt_id = 0; |
| |
| for (;;) { |
| ssize_t nr_mounts; |
| |
| nr_mounts = listmount(LSMT_ROOT, 0, last_mnt_id, |
| list, LISTMNT_BUFFER, 0); |
| ASSERT_GE(nr_mounts, 0); |
| if (nr_mounts == 0) |
| break; |
| |
| for (size_t cur = 0; cur < nr_mounts; cur++) { |
| if (cur < nr_mounts - 1) |
| ASSERT_LT(list[cur], list[cur + 1]); |
| last_mnt_id = list[cur]; |
| } |
| } |
| } |
| |
| /* Check that all mount ids are in decreasing order. */ |
| TEST(listmount_backward) |
| { |
| uint64_t list[LISTMNT_BUFFER], last_mnt_id = 0; |
| |
| for (;;) { |
| ssize_t nr_mounts; |
| |
| nr_mounts = listmount(LSMT_ROOT, 0, last_mnt_id, |
| list, LISTMNT_BUFFER, LISTMOUNT_REVERSE); |
| ASSERT_GE(nr_mounts, 0); |
| if (nr_mounts == 0) |
| break; |
| |
| for (size_t cur = 0; cur < nr_mounts; cur++) { |
| if (cur < nr_mounts - 1) |
| ASSERT_GT(list[cur], list[cur + 1]); |
| last_mnt_id = list[cur]; |
| } |
| } |
| } |
| |
| TEST_HARNESS_MAIN |