selftests/user_events: Fix to unmount tracefs when test created mount
authorBeau Belgrave <beaub@linux.microsoft.com>
Fri, 15 Sep 2023 22:27:54 +0000 (22:27 +0000)
committerShuah Khan <skhan@linuxfoundation.org>
Mon, 18 Sep 2023 17:04:52 +0000 (11:04 -0600)
Fix to unmount tracefs if the self-test mounted it to allow testing.
If tracefs was already mounted, this does nothing.

Suggested-by: Mark Brown <broonie@kernel.org>
Link: https://lore.kernel.org/all/29fce076-746c-4650-8358-b4e0fa215cf7@sirena.org.uk/
Fixes: a06023a8f78d ("selftests/user_events: Fix failures when user_events is not installed")
Signed-off-by: Beau Belgrave <beaub@linux.microsoft.com>
Reviewed-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
tools/testing/selftests/user_events/abi_test.c
tools/testing/selftests/user_events/dyn_test.c
tools/testing/selftests/user_events/ftrace_test.c
tools/testing/selftests/user_events/perf_test.c
tools/testing/selftests/user_events/user_events_selftests.h

index 22374d29ffdd4c0379bcd9fa82a9d0c6158c7afb..8202f1327c396141aa707951ac70347b063472c1 100644 (file)
@@ -91,16 +91,18 @@ static int reg_disable(long *enable, int bit)
 
 FIXTURE(user) {
        long check;
+       bool umount;
 };
 
 FIXTURE_SETUP(user) {
-       USER_EVENT_FIXTURE_SETUP(return);
+       USER_EVENT_FIXTURE_SETUP(return, self->umount);
 
        change_event(false);
        self->check = 0;
 }
 
 FIXTURE_TEARDOWN(user) {
+       USER_EVENT_FIXTURE_TEARDOWN(self->umount);
 }
 
 TEST_F(user, enablement) {
index 32c827a52d7d82ec9b5c791f7b61753510622958..a85980190beafcf2a442be89994c466f6bea653e 100644 (file)
@@ -144,13 +144,16 @@ do { \
 
 FIXTURE(user) {
        int check;
+       bool umount;
 };
 
 FIXTURE_SETUP(user) {
-       USER_EVENT_FIXTURE_SETUP(return);
+       USER_EVENT_FIXTURE_SETUP(return, self->umount);
 }
 
 FIXTURE_TEARDOWN(user) {
+       USER_EVENT_FIXTURE_TEARDOWN(self->umount);
+
        wait_for_delete();
 }
 
index 6a260caeeddc54ef194608bc9d82fba2892bdfcd..dcd7509fe2e05327f6c567ac4cb41cb3047d9eec 100644 (file)
@@ -204,10 +204,11 @@ FIXTURE(user) {
        int data_fd;
        int enable_fd;
        int check;
+       bool umount;
 };
 
 FIXTURE_SETUP(user) {
-       USER_EVENT_FIXTURE_SETUP(return);
+       USER_EVENT_FIXTURE_SETUP(return, self->umount);
 
        self->status_fd = open(status_file, O_RDONLY);
        ASSERT_NE(-1, self->status_fd);
@@ -219,6 +220,8 @@ FIXTURE_SETUP(user) {
 }
 
 FIXTURE_TEARDOWN(user) {
+       USER_EVENT_FIXTURE_TEARDOWN(self->umount);
+
        close(self->status_fd);
        close(self->data_fd);
 
index f893398cda05a522a433c75cf2b2766be649bac7..5288e768b207a9c57fa7ca020f7560cda4d1bc51 100644 (file)
@@ -111,16 +111,19 @@ static int clear(int *check)
 FIXTURE(user) {
        int data_fd;
        int check;
+       bool umount;
 };
 
 FIXTURE_SETUP(user) {
-       USER_EVENT_FIXTURE_SETUP(return);
+       USER_EVENT_FIXTURE_SETUP(return, self->umount);
 
        self->data_fd = open(data_file, O_RDWR);
        ASSERT_NE(-1, self->data_fd);
 }
 
 FIXTURE_TEARDOWN(user) {
+       USER_EVENT_FIXTURE_TEARDOWN(self->umount);
+
        close(self->data_fd);
 
        if (clear(&self->check) != 0)
index 690378942f8215e543457ba36d918fdcee26769c..e1c3c063c031cd6fb557086b6e24ec7941e76c34 100644 (file)
 
 #include "../kselftest.h"
 
-static inline bool tracefs_enabled(char **message, bool *fail)
+static inline void tracefs_unmount(void)
+{
+       umount("/sys/kernel/tracing");
+}
+
+static inline bool tracefs_enabled(char **message, bool *fail, bool *umount)
 {
        struct stat buf;
        int ret;
 
        *message = "";
        *fail = false;
+       *umount = false;
 
        /* Ensure tracefs is installed */
        ret = stat("/sys/kernel/tracing", &buf);
@@ -37,6 +43,8 @@ static inline bool tracefs_enabled(char **message, bool *fail)
                        return false;
                }
 
+               *umount = true;
+
                ret = stat("/sys/kernel/tracing/README", &buf);
        }
 
@@ -49,13 +57,14 @@ static inline bool tracefs_enabled(char **message, bool *fail)
        return true;
 }
 
-static inline bool user_events_enabled(char **message, bool *fail)
+static inline bool user_events_enabled(char **message, bool *fail, bool *umount)
 {
        struct stat buf;
        int ret;
 
        *message = "";
        *fail = false;
+       *umount = false;
 
        if (getuid() != 0) {
                *message = "Must be run as root";
@@ -63,7 +72,7 @@ static inline bool user_events_enabled(char **message, bool *fail)
                return false;
        }
 
-       if (!tracefs_enabled(message, fail))
+       if (!tracefs_enabled(message, fail, umount))
                return false;
 
        /* Ensure user_events is installed */
@@ -85,10 +94,10 @@ static inline bool user_events_enabled(char **message, bool *fail)
        return true;
 }
 
-#define USER_EVENT_FIXTURE_SETUP(statement) do { \
+#define USER_EVENT_FIXTURE_SETUP(statement, umount) do { \
        char *message; \
        bool fail; \
-       if (!user_events_enabled(&message, &fail)) { \
+       if (!user_events_enabled(&message, &fail, &(umount))) { \
                if (fail) { \
                        TH_LOG("Setup failed due to: %s", message); \
                        ASSERT_FALSE(fail); \
@@ -97,4 +106,9 @@ static inline bool user_events_enabled(char **message, bool *fail)
        } \
 } while (0)
 
+#define USER_EVENT_FIXTURE_TEARDOWN(umount) do { \
+       if ((umount))  \
+               tracefs_unmount(); \
+} while (0)
+
 #endif /* _USER_EVENTS_SELFTESTS_H */