From: Luca Boccassi Verify that fstat works as expected after the switch from anon_inode to the new magic number. Signed-off-by: Luca Boccassi Reviewed-by: Pasha Tatashin --- v4: split test case in separate patch, reorder variable declarations v5: add r-b tag, merge series with LIVEUPDATE_SESSION_GET_NAME ioctl as they both change the same unit test source file, to avoid merge conflicts .../testing/selftests/liveupdate/liveupdate.c | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/tools/testing/selftests/liveupdate/liveupdate.c b/tools/testing/selftests/liveupdate/liveupdate.c index c2878e3d5ef9..d132b4685f76 100644 --- a/tools/testing/selftests/liveupdate/liveupdate.c +++ b/tools/testing/selftests/liveupdate/liveupdate.c @@ -22,9 +22,12 @@ #include #include #include +#include +#include #include #include +#include #include "../kselftest.h" #include "../kselftest_harness.h" @@ -345,4 +348,41 @@ TEST_F(liveupdate_device, preserve_unsupported_fd) ASSERT_EQ(close(session_fd), 0); } +/* + * Test Case: Session fstat + * + * Verifies that fstatfs() on a session file descriptor reports the + * LUO_SESSION_MAGIC filesystem type, and that fstat() returns consistent + * inode numbers across different sessions (shared singleton inode). + */ +TEST_F(liveupdate_device, session_fstat) +{ + int session_fd1, session_fd2; + struct stat st1, st2; + struct statfs sfs; + + self->fd1 = open(LIVEUPDATE_DEV, O_RDWR); + if (self->fd1 < 0 && errno == ENOENT) + SKIP(return, "%s does not exist", LIVEUPDATE_DEV); + ASSERT_GE(self->fd1, 0); + + session_fd1 = create_session(self->fd1, "fstat-session-1"); + ASSERT_GE(session_fd1, 0); + + session_fd2 = create_session(self->fd1, "fstat-session-2"); + ASSERT_GE(session_fd2, 0); + + /* Verify the filesystem type is LUO_SESSION_MAGIC */ + ASSERT_EQ(fstatfs(session_fd1, &sfs), 0); + EXPECT_EQ(sfs.f_type, LUO_SESSION_MAGIC); + + /* Verify both sessions share the same inode number */ + ASSERT_EQ(fstat(session_fd1, &st1), 0); + ASSERT_EQ(fstat(session_fd2, &st2), 0); + EXPECT_EQ(st1.st_ino, st2.st_ino); + + ASSERT_EQ(close(session_fd1), 0); + ASSERT_EQ(close(session_fd2), 0); +} + TEST_HARNESS_MAIN -- 2.47.3