From f2704f05cbe8ede3081adc1d94f72d43cbb25e14 Mon Sep 17 00:00:00 2001 From: Alan Somers Date: Tue, 25 Jun 2019 21:21:34 +0000 Subject: [PATCH] fusefs: fix the tests for non-default values of MAXPHYS Sponsored by: The FreeBSD Foundation --- tests/sys/fs/fusefs/bmap.cc | 12 ++++++------ tests/sys/fs/fusefs/read.cc | 28 +++++++++++++++++----------- tests/sys/fs/fusefs/utils.cc | 8 ++++++-- tests/sys/fs/fusefs/utils.hh | 1 + tests/sys/fs/fusefs/write.cc | 8 ++++---- 5 files changed, 34 insertions(+), 23 deletions(-) diff --git a/tests/sys/fs/fusefs/bmap.cc b/tests/sys/fs/fusefs/bmap.cc index 3ab345a45377..d5330d90183c 100644 --- a/tests/sys/fs/fusefs/bmap.cc +++ b/tests/sys/fs/fusefs/bmap.cc @@ -99,8 +99,8 @@ TEST_F(Bmap, bmap) arg.runb = -1; ASSERT_EQ(0, ioctl(fd, FIOBMAP2, &arg)) << strerror(errno); EXPECT_EQ(arg.bn, pbn); - EXPECT_EQ(arg.runp, MAXPHYS / m_maxbcachebuf - 1); - EXPECT_EQ(arg.runb, MAXPHYS / m_maxbcachebuf - 1); + EXPECT_EQ(arg.runp, m_maxphys / m_maxbcachebuf - 1); + EXPECT_EQ(arg.runb, m_maxphys / m_maxbcachebuf - 1); } /* @@ -134,7 +134,7 @@ TEST_F(Bmap, default_) arg.runb = -1; ASSERT_EQ(0, ioctl(fd, FIOBMAP2, &arg)) << strerror(errno); EXPECT_EQ(arg.bn, 0); - EXPECT_EQ(arg.runp, MAXPHYS / m_maxbcachebuf - 1); + EXPECT_EQ(arg.runp, m_maxphys / m_maxbcachebuf - 1); EXPECT_EQ(arg.runb, 0); /* In the middle */ @@ -144,8 +144,8 @@ TEST_F(Bmap, default_) arg.runb = -1; ASSERT_EQ(0, ioctl(fd, FIOBMAP2, &arg)) << strerror(errno); EXPECT_EQ(arg.bn, lbn * m_maxbcachebuf / DEV_BSIZE); - EXPECT_EQ(arg.runp, MAXPHYS / m_maxbcachebuf - 1); - EXPECT_EQ(arg.runb, MAXPHYS / m_maxbcachebuf - 1); + EXPECT_EQ(arg.runp, m_maxphys / m_maxbcachebuf - 1); + EXPECT_EQ(arg.runb, m_maxphys / m_maxbcachebuf - 1); /* Last block */ lbn = filesize / m_maxbcachebuf - 1; @@ -155,5 +155,5 @@ TEST_F(Bmap, default_) ASSERT_EQ(0, ioctl(fd, FIOBMAP2, &arg)) << strerror(errno); EXPECT_EQ(arg.bn, lbn * m_maxbcachebuf / DEV_BSIZE); EXPECT_EQ(arg.runp, 0); - EXPECT_EQ(arg.runb, MAXPHYS / m_maxbcachebuf - 1); + EXPECT_EQ(arg.runb, m_maxphys / m_maxbcachebuf - 1); } diff --git a/tests/sys/fs/fusefs/read.cc b/tests/sys/fs/fusefs/read.cc index 9b2884bf17c3..285c17c55b59 100644 --- a/tests/sys/fs/fusefs/read.cc +++ b/tests/sys/fs/fusefs/read.cc @@ -110,10 +110,16 @@ virtual void SetUp() { }; class ReadAhead: public ReadCacheable, - public WithParamInterface> + public WithParamInterface> { virtual void SetUp() { - m_maxreadahead = get<1>(GetParam()); + int val; + const char *node = "vfs.maxbcachebuf"; + size_t size = sizeof(val); + ASSERT_EQ(0, sysctlbyname(node, &val, &size, NULL, 0)) + << strerror(errno); + + m_maxreadahead = val * get<1>(GetParam()); m_noclusterr = get<0>(GetParam()); ReadCacheable::SetUp(); } @@ -892,8 +898,8 @@ TEST_P(ReadAhead, readahead) { expect_lookup(RELPATH, ino, filesize); expect_open(ino, 0, 1); maxcontig = m_noclusterr ? m_maxbcachebuf : - m_maxbcachebuf + (int)get<1>(GetParam()); - clustersize = MIN(maxcontig, MAXPHYS); + m_maxbcachebuf + m_maxreadahead; + clustersize = MIN(maxcontig, m_maxphys); for (offs = 0; offs < bufsize; offs += clustersize) { len = std::min((size_t)clustersize, (size_t)(filesize - offs)); expect_read(ino, offs, len, len, contents + offs); @@ -912,10 +918,10 @@ TEST_P(ReadAhead, readahead) { } INSTANTIATE_TEST_CASE_P(RA, ReadAhead, - Values(tuple(false, 0u), - tuple(false, 0x10000), - tuple(false, 0x20000), - tuple(false, 0x30000), - tuple(true, 0u), - tuple(true, 0x10000), - tuple(true, 0x20000))); + Values(tuple(false, 0), + tuple(false, 1), + tuple(false, 2), + tuple(false, 3), + tuple(true, 0), + tuple(true, 1), + tuple(true, 2))); diff --git a/tests/sys/fs/fusefs/utils.cc b/tests/sys/fs/fusefs/utils.cc index cd8b8be40259..eda43a5dcbf5 100644 --- a/tests/sys/fs/fusefs/utils.cc +++ b/tests/sys/fs/fusefs/utils.cc @@ -93,7 +93,8 @@ class FuseEnv: public Environment { }; void FuseTest::SetUp() { - const char *node = "vfs.maxbcachebuf"; + const char *maxbcachebuf_node = "vfs.maxbcachebuf"; + const char *maxphys_node = "kern.maxphys"; int val = 0; size_t size = sizeof(val); @@ -105,9 +106,12 @@ void FuseTest::SetUp() { if (IsSkipped()) return; - ASSERT_EQ(0, sysctlbyname(node, &val, &size, NULL, 0)) + ASSERT_EQ(0, sysctlbyname(maxbcachebuf_node, &val, &size, NULL, 0)) << strerror(errno); m_maxbcachebuf = val; + ASSERT_EQ(0, sysctlbyname(maxphys_node, &val, &size, NULL, 0)) + << strerror(errno); + m_maxphys = val; try { m_mock = new MockFS(m_maxreadahead, m_allow_other, diff --git a/tests/sys/fs/fusefs/utils.hh b/tests/sys/fs/fusefs/utils.hh index ddda0e5a4298..174ed0e71f7c 100644 --- a/tests/sys/fs/fusefs/utils.hh +++ b/tests/sys/fs/fusefs/utils.hh @@ -60,6 +60,7 @@ class FuseTest : public ::testing::Test { public: int m_maxbcachebuf; + int m_maxphys; FuseTest(): m_maxreadahead(0), diff --git a/tests/sys/fs/fusefs/write.cc b/tests/sys/fs/fusefs/write.cc index 401cc04b6418..a545e748b221 100644 --- a/tests/sys/fs/fusefs/write.cc +++ b/tests/sys/fs/fusefs/write.cc @@ -233,13 +233,13 @@ virtual void SetUp() { class WriteCluster: public WriteBack { public: virtual void SetUp() { - if (MAXPHYS < 2 * DFLTPHYS) + if (m_maxphys < 2 * DFLTPHYS) GTEST_SKIP() << "MAXPHYS must be at least twice DFLTPHYS" << " for this test"; m_async = true; - m_maxwrite = MAXPHYS; + m_maxwrite = m_maxphys; WriteBack::SetUp(); - if (MAXPHYS < 2 * m_maxbcachebuf) + if (m_maxphys < 2 * m_maxbcachebuf) GTEST_SKIP() << "MAXPHYS must be at least twice maxbcachebuf" << " for this test"; } @@ -678,7 +678,7 @@ TEST_F(Write, write_large) expect_lookup(RELPATH, ino, 0); expect_open(ino, 0, 1); - expect_write(ino, 0, halfbufsize, halfbufsize, contents); + maybe_expect_write(ino, 0, halfbufsize, contents); maybe_expect_write(ino, halfbufsize, halfbufsize, &contents[halfbufsize / sizeof(int)]);