svn commit: r345207 - projects/fuse2/tests/sys/fs/fuse

Alan Somers asomers at FreeBSD.org
Fri Mar 15 22:47:27 UTC 2019


Author: asomers
Date: Fri Mar 15 22:47:20 2019
New Revision: 345207
URL: https://svnweb.freebsd.org/changeset/base/345207

Log:
  fuse(4): add tests for the FOPEN_KEEP_CACHE option
  
  PR:		236560
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/fuse2/tests/sys/fs/fuse/access.cc
  projects/fuse2/tests/sys/fs/fuse/create.cc
  projects/fuse2/tests/sys/fs/fuse/destroy.cc
  projects/fuse2/tests/sys/fs/fuse/flush.cc
  projects/fuse2/tests/sys/fs/fuse/fsync.cc
  projects/fuse2/tests/sys/fs/fuse/fsyncdir.cc
  projects/fuse2/tests/sys/fs/fuse/getattr.cc
  projects/fuse2/tests/sys/fs/fuse/interrupt.cc
  projects/fuse2/tests/sys/fs/fuse/link.cc
  projects/fuse2/tests/sys/fs/fuse/locks.cc
  projects/fuse2/tests/sys/fs/fuse/mkdir.cc
  projects/fuse2/tests/sys/fs/fuse/open.cc
  projects/fuse2/tests/sys/fs/fuse/opendir.cc
  projects/fuse2/tests/sys/fs/fuse/read.cc
  projects/fuse2/tests/sys/fs/fuse/readdir.cc
  projects/fuse2/tests/sys/fs/fuse/readlink.cc
  projects/fuse2/tests/sys/fs/fuse/release.cc
  projects/fuse2/tests/sys/fs/fuse/releasedir.cc
  projects/fuse2/tests/sys/fs/fuse/rename.cc
  projects/fuse2/tests/sys/fs/fuse/unlink.cc
  projects/fuse2/tests/sys/fs/fuse/utils.cc
  projects/fuse2/tests/sys/fs/fuse/utils.hh
  projects/fuse2/tests/sys/fs/fuse/write.cc
  projects/fuse2/tests/sys/fs/fuse/xattr.cc

Modified: projects/fuse2/tests/sys/fs/fuse/access.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/access.cc	Fri Mar 15 22:39:55 2019	(r345206)
+++ projects/fuse2/tests/sys/fs/fuse/access.cc	Fri Mar 15 22:47:20 2019	(r345207)
@@ -55,7 +55,7 @@ void expect_access(uint64_t ino, mode_t access_mode, i
 
 void expect_lookup(const char *relpath, uint64_t ino)
 {
-	FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 1);
+	FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 0, 1);
 }
 };
 

Modified: projects/fuse2/tests/sys/fs/fuse/create.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/create.cc	Fri Mar 15 22:39:55 2019	(r345206)
+++ projects/fuse2/tests/sys/fs/fuse/create.cc	Fri Mar 15 22:47:20 2019	(r345207)
@@ -288,7 +288,7 @@ TEST_F(Create, DISABLED_entry_cache_negative_purge)
 	ASSERT_LE(0, fd) << strerror(errno);
 
 	/* Finally, a subsequent lookup should query the daemon */
-	expect_lookup(RELPATH, ino, S_IFREG | mode, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | mode, 0, 1);
 
 	ASSERT_EQ(0, access(FULLPATH, F_OK)) << strerror(errno);
 	/* Deliberately leak fd.  close(2) will be tested in release.cc */

Modified: projects/fuse2/tests/sys/fs/fuse/destroy.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/destroy.cc	Fri Mar 15 22:39:55 2019	(r345206)
+++ projects/fuse2/tests/sys/fs/fuse/destroy.cc	Fri Mar 15 22:47:20 2019	(r345207)
@@ -72,7 +72,7 @@ TEST_F(Destroy, ok)
 	const char RELPATH[] = "some_file.txt";
 	uint64_t ino = 42;
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 2);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 2);
 	expect_forget(1, 1);
 	expect_forget(ino, 2);
 	expect_destroy(0);

Modified: projects/fuse2/tests/sys/fs/fuse/flush.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/flush.cc	Fri Mar 15 22:39:55 2019	(r345206)
+++ projects/fuse2/tests/sys/fs/fuse/flush.cc	Fri Mar 15 22:47:20 2019	(r345207)
@@ -57,7 +57,7 @@ void expect_flush(uint64_t ino, int times, pid_t lo, P
 
 void expect_lookup(const char *relpath, uint64_t ino)
 {
-	FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 1);
+	FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 0, 1);
 }
 
 /*

Modified: projects/fuse2/tests/sys/fs/fuse/fsync.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/fsync.cc	Fri Mar 15 22:39:55 2019	(r345206)
+++ projects/fuse2/tests/sys/fs/fuse/fsync.cc	Fri Mar 15 22:47:20 2019	(r345207)
@@ -65,7 +65,7 @@ void expect_fsync(uint64_t ino, uint32_t flags, int er
 
 void expect_lookup(const char *relpath, uint64_t ino)
 {
-	FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 1);
+	FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 0, 1);
 }
 
 void expect_write(uint64_t ino, uint64_t size, const void *contents)

Modified: projects/fuse2/tests/sys/fs/fuse/fsyncdir.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/fsyncdir.cc	Fri Mar 15 22:39:55 2019	(r345206)
+++ projects/fuse2/tests/sys/fs/fuse/fsyncdir.cc	Fri Mar 15 22:47:20 2019	(r345207)
@@ -66,7 +66,7 @@ void expect_fsyncdir(uint64_t ino, uint32_t flags, int
 
 void expect_lookup(const char *relpath, uint64_t ino)
 {
-	FuseTest::expect_lookup(relpath, ino, S_IFDIR | 0755, 1);
+	FuseTest::expect_lookup(relpath, ino, S_IFDIR | 0755, 0, 1);
 }
 
 };

Modified: projects/fuse2/tests/sys/fs/fuse/getattr.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/getattr.cc	Fri Mar 15 22:39:55 2019	(r345206)
+++ projects/fuse2/tests/sys/fs/fuse/getattr.cc	Fri Mar 15 22:47:20 2019	(r345207)
@@ -88,7 +88,7 @@ TEST_F(Getattr, attr_cache_timeout)
 	 */
 	long timeout_ns = 250'000'000;
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 2);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 2);
 	EXPECT_CALL(*m_mock, process(
 		ResultOf([](auto in) {
 			return (in->header.opcode == FUSE_GETATTR &&
@@ -116,7 +116,7 @@ TEST_F(Getattr, enoent)
 	struct stat sb;
 	const uint64_t ino = 42;
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1);
 	EXPECT_CALL(*m_mock, process(
 		ResultOf([](auto in) {
 			return (in->header.opcode == FUSE_GETATTR &&
@@ -135,7 +135,7 @@ TEST_F(Getattr, ok)
 	const uint64_t ino = 42;
 	struct stat sb;
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1, 1);
 	EXPECT_CALL(*m_mock, process(
 		ResultOf([](auto in) {
 			return (in->header.opcode == FUSE_GETATTR &&

Modified: projects/fuse2/tests/sys/fs/fuse/interrupt.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/interrupt.cc	Fri Mar 15 22:39:55 2019	(r345206)
+++ projects/fuse2/tests/sys/fs/fuse/interrupt.cc	Fri Mar 15 22:47:20 2019	(r345207)
@@ -66,7 +66,7 @@ Interrupt(): m_child(NULL) {};
 
 void expect_lookup(const char *relpath, uint64_t ino)
 {
-	FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 1);
+	FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 0, 1);
 }
 
 /* 

Modified: projects/fuse2/tests/sys/fs/fuse/link.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/link.cc	Fri Mar 15 22:39:55 2019	(r345206)
+++ projects/fuse2/tests/sys/fs/fuse/link.cc	Fri Mar 15 22:47:20 2019	(r345207)
@@ -41,7 +41,7 @@ class Link: public FuseTest {
 public:
 void expect_lookup(const char *relpath, uint64_t ino)
 {
-	FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 1);
+	FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 0, 1);
 }
 };
 

Modified: projects/fuse2/tests/sys/fs/fuse/locks.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/locks.cc	Fri Mar 15 22:39:55 2019	(r345206)
+++ projects/fuse2/tests/sys/fs/fuse/locks.cc	Fri Mar 15 22:47:20 2019	(r345207)
@@ -46,7 +46,7 @@ class Fallback: public FuseTest { (public)
 
 void expect_lookup(const char *relpath, uint64_t ino)
 {
-	FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 1);
+	FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 0, 1);
 }
 
 };

Modified: projects/fuse2/tests/sys/fs/fuse/mkdir.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/mkdir.cc	Fri Mar 15 22:39:55 2019	(r345206)
+++ projects/fuse2/tests/sys/fs/fuse/mkdir.cc	Fri Mar 15 22:47:20 2019	(r345207)
@@ -143,7 +143,7 @@ TEST_F(Mkdir, DISABLED_entry_cache_negative_purge)
 	ASSERT_EQ(0, mkdir(FULLPATH, mode)) << strerror(errno);
 
 	/* Finally, a subsequent lookup should query the daemon */
-	expect_lookup(RELPATH, ino, S_IFDIR | mode, 1);
+	expect_lookup(RELPATH, ino, S_IFDIR | mode, 0, 1);
 
 	ASSERT_EQ(0, access(FULLPATH, F_OK)) << strerror(errno);
 }

Modified: projects/fuse2/tests/sys/fs/fuse/open.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/open.cc	Fri Mar 15 22:39:55 2019	(r345206)
+++ projects/fuse2/tests/sys/fs/fuse/open.cc	Fri Mar 15 22:47:20 2019	(r345207)
@@ -48,7 +48,7 @@ void test_ok(int os_flags, int fuse_flags) {
 	uint64_t ino = 42;
 	int fd;
 
-	FuseTest::expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	FuseTest::expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1);
 	EXPECT_CALL(*m_mock, process(
 		ResultOf([=](auto in) {
 			return (in->header.opcode == FUSE_OPEN &&
@@ -92,7 +92,7 @@ TEST_F(Open, enoent)
 	const char RELPATH[] = "some_file.txt";
 	uint64_t ino = 42;
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1);
 	EXPECT_CALL(*m_mock, process(
 		ResultOf([=](auto in) {
 			return (in->header.opcode == FUSE_OPEN &&
@@ -114,7 +114,7 @@ TEST_F(Open, eperm)
 	const char RELPATH[] = "some_file.txt";
 	uint64_t ino = 42;
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1);
 	EXPECT_CALL(*m_mock, process(
 		ResultOf([=](auto in) {
 			return (in->header.opcode == FUSE_OPEN &&

Modified: projects/fuse2/tests/sys/fs/fuse/opendir.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/opendir.cc	Fri Mar 15 22:39:55 2019	(r345206)
+++ projects/fuse2/tests/sys/fs/fuse/opendir.cc	Fri Mar 15 22:47:20 2019	(r345207)
@@ -42,7 +42,7 @@ class Opendir: public FuseTest {
 public:
 void expect_lookup(const char *relpath, uint64_t ino)
 {
-	FuseTest::expect_lookup(relpath, ino, S_IFDIR | 0755, 1);
+	FuseTest::expect_lookup(relpath, ino, S_IFDIR | 0755, 0, 1);
 }
 };
 

Modified: projects/fuse2/tests/sys/fs/fuse/read.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/read.cc	Fri Mar 15 22:39:55 2019	(r345206)
+++ projects/fuse2/tests/sys/fs/fuse/read.cc	Fri Mar 15 22:47:20 2019	(r345207)
@@ -48,9 +48,9 @@ using namespace testing;
 class Read: public FuseTest {
 
 public:
-void expect_lookup(const char *relpath, uint64_t ino)
+void expect_lookup(const char *relpath, uint64_t ino, uint64_t size)
 {
-	FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 1);
+	FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, size, 1);
 }
 };
 
@@ -97,7 +97,7 @@ TEST_F(AioRead, aio_read)
 	char buf[bufsize];
 	struct aiocb iocb, *piocb;
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, bufsize);
 	expect_open(ino, 0, 1);
 	expect_getattr(ino, bufsize);
 	expect_read(ino, 0, bufsize, bufsize, CONTENTS);
@@ -132,7 +132,7 @@ TEST_F(AioRead, async_read_disabled)
 	off_t off1 = 4096;
 	struct aiocb iocb0, iocb1;
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, bufsize);
 	expect_open(ino, 0, 1);
 	expect_getattr(ino, bufsize);
 	EXPECT_CALL(*m_mock, process(
@@ -210,7 +210,7 @@ TEST_F(AsyncRead, DISABLED_async_read)
 	off_t off1 = 4096;
 	struct aiocb iocb0, iocb1;
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, bufsize);
 	expect_open(ino, 0, 1);
 	expect_getattr(ino, bufsize);
 	EXPECT_CALL(*m_mock, process(
@@ -279,7 +279,7 @@ TEST_F(Read, direct_io_read_nothing)
 	uint64_t offset = 100;
 	char buf[80];
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, offset + 1000);
 	expect_open(ino, FOPEN_DIRECT_IO, 1);
 	expect_getattr(ino, offset + 1000);
 
@@ -305,7 +305,7 @@ TEST_F(Read, direct_io_pread)
 	ssize_t bufsize = strlen(CONTENTS);
 	char buf[bufsize];
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, offset + bufsize);
 	expect_open(ino, FOPEN_DIRECT_IO, 1);
 	expect_getattr(ino, offset + bufsize);
 	expect_read(ino, offset, bufsize, bufsize, CONTENTS);
@@ -334,7 +334,7 @@ TEST_F(Read, direct_io_short_read)
 	ssize_t halfbufsize = bufsize / 2;
 	char buf[bufsize];
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, offset + bufsize);
 	expect_open(ino, FOPEN_DIRECT_IO, 1);
 	expect_getattr(ino, offset + bufsize);
 	expect_read(ino, offset, bufsize, halfbufsize, CONTENTS);
@@ -358,7 +358,7 @@ TEST_F(Read, eio)
 	ssize_t bufsize = strlen(CONTENTS);
 	char buf[bufsize];
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, bufsize);
 	expect_open(ino, 0, 1);
 	expect_getattr(ino, bufsize);
 	EXPECT_CALL(*m_mock, process(
@@ -376,6 +376,79 @@ TEST_F(Read, eio)
 	/* Deliberately leak fd.  close(2) will be tested in release.cc */
 }
 
+/* 
+ * With the keep_cache option, the kernel may keep its read cache across
+ * multiple open(2)s.
+ */
+/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236560 */
+TEST_F(Read, DISABLED_keep_cache)
+{
+	const char FULLPATH[] = "mountpoint/some_file.txt";
+	const char RELPATH[] = "some_file.txt";
+	const char *CONTENTS = "abcdefgh";
+	uint64_t ino = 42;
+	int fd0, fd1;
+	ssize_t bufsize = strlen(CONTENTS);
+	char buf[bufsize];
+
+	FuseTest::expect_lookup(RELPATH, ino, S_IFREG | 0644, bufsize, 2);
+	expect_open(ino, FOPEN_KEEP_CACHE, 1);
+	expect_getattr(ino, bufsize);
+	expect_read(ino, 0, bufsize, bufsize, CONTENTS);
+
+	fd0 = open(FULLPATH, O_RDONLY);
+	ASSERT_LE(0, fd0) << strerror(errno);
+	ASSERT_EQ(bufsize, read(fd0, buf, bufsize)) << strerror(errno);
+
+	fd1 = open(FULLPATH, O_RDONLY);
+	ASSERT_LE(0, fd1) << strerror(errno);
+
+	/*
+	 * This read should be serviced by cache, even though it's on the other
+	 * file descriptor
+	 */
+	ASSERT_EQ(bufsize, read(fd1, buf, bufsize)) << strerror(errno);
+
+	/* Deliberately leak fd0 and fd1. */
+}
+
+/* 
+ * Without the keep_cache option, the kernel should drop its read caches on
+ * every open
+ */
+TEST_F(Read, keep_cache_disabled)
+{
+	const char FULLPATH[] = "mountpoint/some_file.txt";
+	const char RELPATH[] = "some_file.txt";
+	const char *CONTENTS = "abcdefgh";
+	uint64_t ino = 42;
+	int fd0, fd1;
+	ssize_t bufsize = strlen(CONTENTS);
+	char buf[bufsize];
+
+	FuseTest::expect_lookup(RELPATH, ino, S_IFREG | 0644, bufsize, 2);
+	expect_open(ino, FOPEN_KEEP_CACHE, 1);
+	expect_getattr(ino, bufsize);
+	expect_read(ino, 0, bufsize, bufsize, CONTENTS);
+
+	fd0 = open(FULLPATH, O_RDONLY);
+	ASSERT_LE(0, fd0) << strerror(errno);
+	ASSERT_EQ(bufsize, read(fd0, buf, bufsize)) << strerror(errno);
+
+	fd1 = open(FULLPATH, O_RDONLY);
+	ASSERT_LE(0, fd1) << strerror(errno);
+
+	/*
+	 * This read should not be serviced by cache, even though it's on the
+	 * original file descriptor
+	 */
+	expect_read(ino, 0, bufsize, bufsize, CONTENTS);
+	ASSERT_EQ(0, lseek(fd0, 0, SEEK_SET)) << strerror(errno);
+	ASSERT_EQ(bufsize, read(fd0, buf, bufsize)) << strerror(errno);
+
+	/* Deliberately leak fd0 and fd1. */
+}
+
 TEST_F(Read, mmap)
 {
 	const char FULLPATH[] = "mountpoint/some_file.txt";
@@ -390,7 +463,7 @@ TEST_F(Read, mmap)
 
 	len = getpagesize();
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, bufsize);
 	expect_open(ino, 0, 1);
 	expect_getattr(ino, bufsize);
 	/* mmap may legitimately try to read more data than is available */
@@ -434,7 +507,7 @@ TEST_F(Read, o_direct)
 	ssize_t bufsize = strlen(CONTENTS);
 	char buf[bufsize];
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, bufsize);
 	expect_open(ino, 0, 1);
 	expect_getattr(ino, bufsize);
 	expect_read(ino, 0, bufsize, bufsize, CONTENTS);
@@ -471,7 +544,7 @@ TEST_F(Read, pread)
 	ssize_t bufsize = strlen(CONTENTS);
 	char buf[bufsize];
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, offset + bufsize);
 	expect_open(ino, 0, 1);
 	expect_getattr(ino, offset + bufsize);
 	expect_read(ino, offset, bufsize, bufsize, CONTENTS);
@@ -494,7 +567,7 @@ TEST_F(Read, read)
 	ssize_t bufsize = strlen(CONTENTS);
 	char buf[bufsize];
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, bufsize);
 	expect_open(ino, 0, 1);
 	expect_getattr(ino, bufsize);
 	expect_read(ino, 0, bufsize, bufsize, CONTENTS);
@@ -504,6 +577,7 @@ TEST_F(Read, read)
 
 	ASSERT_EQ(bufsize, read(fd, buf, bufsize)) << strerror(errno);
 	ASSERT_EQ(0, memcmp(buf, CONTENTS, bufsize));
+
 	/* Deliberately leak fd.  close(2) will be tested in release.cc */
 }
 
@@ -527,7 +601,7 @@ TEST_F(Read, default_readahead)
 	ASSERT_NE(NULL, contents);
 	memmove(contents, CONTENTS0, strlen(CONTENTS0));
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, filesize);
 	expect_open(ino, 0, 1);
 	expect_getattr(ino, filesize);
 	expect_read(ino, 0, default_maxreadahead, default_maxreadahead,
@@ -558,7 +632,7 @@ TEST_F(Read, sendfile)
 	int sp[2];
 	off_t sbytes;
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, bufsize);
 	expect_open(ino, 0, 1);
 	expect_getattr(ino, bufsize);
 	/* Like mmap, sendfile may request more data than is available */
@@ -604,7 +678,7 @@ TEST_F(Read, DISABLED_sendfile_eio)
 	int sp[2];
 	off_t sbytes;
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, bufsize);
 	expect_open(ino, 0, 1);
 	expect_getattr(ino, bufsize);
 	EXPECT_CALL(*m_mock, process(
@@ -646,7 +720,7 @@ TEST_P(ReadAhead, DISABLED_readahead) {
 	ASSERT_NE(NULL, contents);
 	memmove(contents, CONTENTS0, strlen(CONTENTS0));
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, filesize);
 	expect_open(ino, 0, 1);
 	expect_getattr(ino, filesize);
 	/* fuse(4) should only read ahead the allowed amount */

Modified: projects/fuse2/tests/sys/fs/fuse/readdir.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/readdir.cc	Fri Mar 15 22:39:55 2019	(r345206)
+++ projects/fuse2/tests/sys/fs/fuse/readdir.cc	Fri Mar 15 22:47:20 2019	(r345207)
@@ -43,7 +43,7 @@ class Readdir: public FuseTest {
 public:
 void expect_lookup(const char *relpath, uint64_t ino)
 {
-	FuseTest::expect_lookup(relpath, ino, S_IFDIR | 0755, 1);
+	FuseTest::expect_lookup(relpath, ino, S_IFDIR | 0755, 0, 1);
 }
 
 void expect_readdir(uint64_t ino, uint64_t off, vector<struct dirent> &ents)

Modified: projects/fuse2/tests/sys/fs/fuse/readlink.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/readlink.cc	Fri Mar 15 22:39:55 2019	(r345206)
+++ projects/fuse2/tests/sys/fs/fuse/readlink.cc	Fri Mar 15 22:47:20 2019	(r345207)
@@ -41,7 +41,7 @@ class Readlink: public FuseTest {
 public:
 void expect_lookup(const char *relpath, uint64_t ino)
 {
-	FuseTest::expect_lookup(relpath, ino, S_IFLNK | 0777, 1);
+	FuseTest::expect_lookup(relpath, ino, S_IFLNK | 0777, 0, 1);
 }
 };
 

Modified: projects/fuse2/tests/sys/fs/fuse/release.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/release.cc	Fri Mar 15 22:39:55 2019	(r345206)
+++ projects/fuse2/tests/sys/fs/fuse/release.cc	Fri Mar 15 22:47:20 2019	(r345207)
@@ -43,7 +43,7 @@ class Release: public FuseTest {
 public:
 void expect_lookup(const char *relpath, uint64_t ino, int times)
 {
-	FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, times);
+	FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 0, times);
 }
 };
 

Modified: projects/fuse2/tests/sys/fs/fuse/releasedir.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/releasedir.cc	Fri Mar 15 22:39:55 2019	(r345206)
+++ projects/fuse2/tests/sys/fs/fuse/releasedir.cc	Fri Mar 15 22:47:20 2019	(r345207)
@@ -42,7 +42,7 @@ class ReleaseDir: public FuseTest {
 public:
 void expect_lookup(const char *relpath, uint64_t ino)
 {
-	FuseTest::expect_lookup(relpath, ino, S_IFDIR | 0755, 1);
+	FuseTest::expect_lookup(relpath, ino, S_IFDIR | 0755, 0, 1);
 }
 
 void expect_releasedir(uint64_t ino, ProcessMockerT r)

Modified: projects/fuse2/tests/sys/fs/fuse/rename.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/rename.cc	Fri Mar 15 22:39:55 2019	(r345206)
+++ projects/fuse2/tests/sys/fs/fuse/rename.cc	Fri Mar 15 22:47:20 2019	(r345207)
@@ -62,7 +62,7 @@ TEST_F(Rename, einval)
 	const char RELSRC[] = "src";
 	uint64_t src_ino = 42;
 
-	expect_lookup(RELSRC, src_ino, S_IFDIR | 0755, 2);
+	expect_lookup(RELSRC, src_ino, S_IFDIR | 0755, 0, 2);
 	EXPECT_LOOKUP(src_ino, RELDST).WillOnce(Invoke(ReturnErrno(ENOENT)));
 
 	ASSERT_NE(0, rename(FULLSRC, FULLDST));
@@ -103,7 +103,7 @@ TEST_F(Rename, DISABLED_entry_cache_negative)
 	 */
 	struct timespec entry_valid = {.tv_sec = 0, .tv_nsec = 0};
 
-	expect_lookup(RELSRC, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELSRC, ino, S_IFREG | 0644, 0, 1);
 	/* LOOKUP returns a negative cache entry for dst */
 	EXPECT_LOOKUP(1, RELDST).WillOnce(ReturnNegativeCache(&entry_valid));
 
@@ -143,7 +143,7 @@ TEST_F(Rename, DISABLED_entry_cache_negative_purge)
 	 */
 	struct timespec entry_valid = {.tv_sec = 0, .tv_nsec = 0};
 
-	expect_lookup(RELSRC, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELSRC, ino, S_IFREG | 0644, 0, 1);
 	/* LOOKUP returns a negative cache entry for dst */
 	EXPECT_LOOKUP(1, RELDST).WillOnce(ReturnNegativeCache(&entry_valid))
 	.RetiresOnSaturation();
@@ -164,7 +164,7 @@ TEST_F(Rename, DISABLED_entry_cache_negative_purge)
 	ASSERT_EQ(0, rename(FULLSRC, FULLDST)) << strerror(errno);
 
 	/* Finally, a subsequent lookup should query the daemon */
-	expect_lookup(RELSRC, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELSRC, ino, S_IFREG | 0644, 0, 1);
 
 	ASSERT_EQ(0, access(FULLDST, F_OK)) << strerror(errno);
 }
@@ -179,7 +179,7 @@ TEST_F(Rename, exdev)
 	tmpfd = mkstemp(tmpfile);
 	ASSERT_LE(0, tmpfd) << strerror(errno);
 
-	expect_lookup(RELB, b_ino, S_IFREG | 0644, 2);
+	expect_lookup(RELB, b_ino, S_IFREG | 0644, 0, 2);
 
 	ASSERT_NE(0, rename(tmpfile, FULLB));
 	ASSERT_EQ(EXDEV, errno);
@@ -198,7 +198,7 @@ TEST_F(Rename, ok)
 	uint64_t dst_dir_ino = 1;
 	uint64_t ino = 42;
 
-	expect_lookup(RELSRC, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELSRC, ino, S_IFREG | 0644, 0, 1);
 	EXPECT_LOOKUP(1, RELDST).WillOnce(Invoke(ReturnErrno(ENOENT)));
 
 	EXPECT_CALL(*m_mock, process(
@@ -230,8 +230,8 @@ TEST_F(Rename, overwrite)
 	uint64_t dst_dir_ino = 1;
 	uint64_t ino = 42;
 
-	expect_lookup(RELSRC, ino, S_IFREG | 0644, 1);
-	expect_lookup(RELDST, dst_ino, S_IFREG | 0644, 1);
+	expect_lookup(RELSRC, ino, S_IFREG | 0644, 0, 1);
+	expect_lookup(RELDST, dst_ino, S_IFREG | 0644, 0, 1);
 	EXPECT_CALL(*m_mock, process(
 		ResultOf([=](auto in) {
 			const char *src = (const char*)in->body.bytes +

Modified: projects/fuse2/tests/sys/fs/fuse/unlink.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/unlink.cc	Fri Mar 15 22:39:55 2019	(r345206)
+++ projects/fuse2/tests/sys/fs/fuse/unlink.cc	Fri Mar 15 22:47:20 2019	(r345207)
@@ -40,7 +40,7 @@ class Unlink: public FuseTest {
 public:
 void expect_lookup(const char *relpath, uint64_t ino, int times)
 {
-	FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, times);
+	FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 0, times);
 }
 
 void expect_unlink(uint64_t parent, const char *path, int error)

Modified: projects/fuse2/tests/sys/fs/fuse/utils.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/utils.cc	Fri Mar 15 22:39:55 2019	(r345206)
+++ projects/fuse2/tests/sys/fs/fuse/utils.cc	Fri Mar 15 22:47:20 2019	(r345207)
@@ -103,7 +103,7 @@ void FuseTest::expect_getattr(uint64_t ino, uint64_t s
 }
 
 void FuseTest::expect_lookup(const char *relpath, uint64_t ino, mode_t mode,
-	int times)
+	uint64_t size, int times)
 {
 	EXPECT_LOOKUP(1, relpath)
 	.Times(times)
@@ -113,6 +113,7 @@ void FuseTest::expect_lookup(const char *relpath, uint
 		out->body.entry.nodeid = ino;
 		out->body.entry.attr.nlink = 1;
 		out->body.entry.attr_valid = UINT64_MAX;
+		out->body.entry.attr.size = size;
 	})));
 }
 

Modified: projects/fuse2/tests/sys/fs/fuse/utils.hh
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/utils.hh	Fri Mar 15 22:39:55 2019	(r345206)
+++ projects/fuse2/tests/sys/fs/fuse/utils.hh	Fri Mar 15 22:47:20 2019	(r345207)
@@ -73,10 +73,10 @@ class FuseTest : public ::testing::Test {
 	/*
 	 * Create an expectation that FUSE_LOOKUP will be called for the given
 	 * path exactly times times.  It will respond with inode ino, mode
-	 * mode, and cache validity forever.
+	 * mode, filesize size, and cache validity forever.
 	 */
 	void expect_lookup(const char *relpath, uint64_t ino, mode_t mode,
-		int times);
+		uint64_t size, int times);
 
 	/*
 	 * Create an expectation that FUSE_GETATTR will be called for the given

Modified: projects/fuse2/tests/sys/fs/fuse/write.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/write.cc	Fri Mar 15 22:39:55 2019	(r345206)
+++ projects/fuse2/tests/sys/fs/fuse/write.cc	Fri Mar 15 22:47:20 2019	(r345207)
@@ -49,9 +49,9 @@ class Write: public FuseTest {
 
 public:
 
-void expect_lookup(const char *relpath, uint64_t ino)
+void expect_lookup(const char *relpath, uint64_t ino, uint64_t size)
 {
-	FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 1);
+	FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, size, 1);
 }
 
 void expect_release(uint64_t ino, ProcessMockerT r)
@@ -146,7 +146,7 @@ TEST_F(AioWrite, DISABLED_aio_write)
 	ssize_t bufsize = strlen(CONTENTS);
 	struct aiocb iocb, *piocb;
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, 0);
 	expect_open(ino, 0, 1);
 	expect_getattr(ino, 0);
 	expect_write(ino, offset, bufsize, bufsize, 0, CONTENTS);
@@ -190,7 +190,7 @@ TEST_F(Write, append)
 
 	require_sync_resize_0();
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, initial_offset);
 	expect_open(ino, 0, 1);
 	expect_getattr(ino, initial_offset);
 	expect_write(ino, initial_offset, BUFSIZE, BUFSIZE, 0, CONTENTS);
@@ -213,7 +213,7 @@ TEST_F(Write, append_direct_io)
 	uint64_t initial_offset = 4096;
 	int fd;
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, initial_offset);
 	expect_open(ino, FOPEN_DIRECT_IO, 1);
 	expect_getattr(ino, initial_offset);
 	expect_write(ino, initial_offset, BUFSIZE, BUFSIZE, 0, CONTENTS);
@@ -238,7 +238,7 @@ TEST_F(Write, DISABLED_direct_io_evicts_cache)
 	ssize_t bufsize = strlen(CONTENTS0) + 1;
 	char readbuf[bufsize];
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, bufsize);
 	expect_open(ino, 0, 1);
 	expect_getattr(ino, bufsize);
 	expect_read(ino, 0, bufsize, bufsize, CONTENTS0);
@@ -281,7 +281,7 @@ TEST_F(Write, DISABLED_direct_io_short_write)
 	ssize_t halfbufsize = bufsize / 2;
 	const char *halfcontents = CONTENTS + halfbufsize;
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, 0);
 	expect_open(ino, FOPEN_DIRECT_IO, 1);
 	expect_getattr(ino, 0);
 	expect_write(ino, 0, bufsize, halfbufsize, 0, CONTENTS);
@@ -316,7 +316,7 @@ TEST_F(Write, DISABLED_direct_io_short_write_iov)
 	ssize_t totalsize = size0 + size1;
 	struct iovec iov[2];
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, 0);
 	expect_open(ino, FOPEN_DIRECT_IO, 1);
 	expect_getattr(ino, 0);
 	expect_write(ino, 0, totalsize, size0, 0, EXPECTED0);
@@ -360,7 +360,7 @@ TEST_F(Write, DISABLED_mmap)
 	ASSERT_NE(NULL, expected);
 	memmove((uint8_t*)expected + offset, CONTENTS, bufsize);
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, len);
 	expect_open(ino, 0, 1);
 	expect_getattr(ino, len);
 	expect_read(ino, 0, len, len, zeros);
@@ -396,7 +396,7 @@ TEST_F(Write, pwrite)
 	int fd;
 	ssize_t bufsize = strlen(CONTENTS);
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, 0);
 	expect_open(ino, 0, 1);
 	expect_getattr(ino, 0);
 	expect_write(ino, offset, bufsize, bufsize, 0, CONTENTS);
@@ -418,7 +418,7 @@ TEST_F(Write, write)
 	int fd;
 	ssize_t bufsize = strlen(CONTENTS);
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, 0);
 	expect_open(ino, 0, 1);
 	expect_getattr(ino, 0);
 	expect_write(ino, 0, bufsize, bufsize, 0, CONTENTS);
@@ -448,7 +448,7 @@ TEST_F(Write, write_large)
 		contents[i] = i;
 	}
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, 0);
 	expect_open(ino, 0, 1);
 	expect_getattr(ino, 0);
 	expect_write(ino, 0, halfbufsize, halfbufsize, 0, contents);
@@ -473,7 +473,7 @@ TEST_F(Write, write_nothing)
 	int fd;
 	ssize_t bufsize = 0;
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, 0);
 	expect_open(ino, 0, 1);
 	expect_getattr(ino, 0);
 
@@ -494,7 +494,7 @@ TEST_F(WriteBack, close)
 	int fd;
 	ssize_t bufsize = strlen(CONTENTS);
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, 0);
 	expect_open(ino, 0, 1);
 	expect_getattr(ino, 0);
 	expect_write(ino, 0, bufsize, bufsize, 0, CONTENTS);
@@ -529,7 +529,7 @@ TEST_F(WriteBack, writeback)
 	ssize_t bufsize = strlen(CONTENTS);
 	char readbuf[bufsize];
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, 0);
 	expect_open(ino, 0, 1);
 	expect_getattr(ino, 0);
 	expect_write(ino, 0, bufsize, bufsize, 0, CONTENTS);
@@ -562,7 +562,7 @@ TEST_F(WriteBack, o_direct)
 	ssize_t bufsize = strlen(CONTENTS);
 	char readbuf[bufsize];
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, 0);
 	expect_open(ino, 0, 1);
 	expect_getattr(ino, 0);
 	expect_write(ino, 0, bufsize, bufsize, 0, CONTENTS);
@@ -596,7 +596,7 @@ TEST_F(WriteThrough, DISABLED_writethrough)
 	ssize_t bufsize = strlen(CONTENTS);
 	char readbuf[bufsize];
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, 0);
 	expect_open(ino, 0, 1);
 	expect_getattr(ino, 0);
 	expect_write(ino, 0, bufsize, bufsize, 0, CONTENTS);
@@ -625,7 +625,7 @@ TEST_F(WriteThrough, DISABLED_update_file_size)
 	int fd;
 	ssize_t bufsize = strlen(CONTENTS);
 
-	expect_lookup(RELPATH, ino);
+	expect_lookup(RELPATH, ino, 0);
 	expect_open(ino, 0, 1);
 	EXPECT_CALL(*m_mock, process(
 		ResultOf([=](auto in) {

Modified: projects/fuse2/tests/sys/fs/fuse/xattr.cc
==============================================================================
--- projects/fuse2/tests/sys/fs/fuse/xattr.cc	Fri Mar 15 22:39:55 2019	(r345206)
+++ projects/fuse2/tests/sys/fs/fuse/xattr.cc	Fri Mar 15 22:47:20 2019	(r345207)
@@ -121,7 +121,7 @@ TEST_F(Getxattr, enoattr)
 	int ns = EXTATTR_NAMESPACE_USER;
 	ssize_t r;
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1);
 	expect_getxattr(ino, "user.foo", ReturnErrno(ENOATTR));
 
 	r = extattr_get_file(FULLPATH, ns, "foo", data, sizeof(data));
@@ -142,7 +142,7 @@ TEST_F(Getxattr, DISABLED_enosys)
 	int ns = EXTATTR_NAMESPACE_USER;
 	ssize_t r;
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1);
 	expect_getxattr(ino, "user.foo", ReturnErrno(ENOSYS));
 
 	r = extattr_get_file(FULLPATH, ns, "foo", data, sizeof(data));
@@ -174,7 +174,7 @@ TEST_F(Getxattr, erange)
 	int ns = EXTATTR_NAMESPACE_USER;
 	ssize_t r;
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1);
 	expect_getxattr(ino, "user.foo", ReturnErrno(ERANGE));
 
 	r = extattr_get_file(FULLPATH, ns, "foo", data, sizeof(data));
@@ -191,7 +191,7 @@ TEST_F(Getxattr, size_only)
 	uint64_t ino = 42;
 	int ns = EXTATTR_NAMESPACE_USER;
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1);
 	expect_getxattr(ino, "user.foo",
 		ReturnImmediate([](auto in __unused, auto out) {
 			SET_OUT_HEADER_LEN(out, getxattr);
@@ -215,7 +215,7 @@ TEST_F(Getxattr, system)
 	int ns = EXTATTR_NAMESPACE_SYSTEM;
 	ssize_t r;
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1);
 	expect_getxattr(ino, "system.foo",
 		ReturnImmediate([&](auto in __unused, auto out) {
 			memcpy((void*)out->body.bytes, value, value_len);
@@ -240,7 +240,7 @@ TEST_F(Getxattr, user)
 	int ns = EXTATTR_NAMESPACE_USER;
 	ssize_t r;
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1);
 	expect_getxattr(ino, "user.foo",
 		ReturnImmediate([&](auto in __unused, auto out) {
 			memcpy((void*)out->body.bytes, value, value_len);
@@ -264,7 +264,7 @@ TEST_F(Listxattr, DISABLED_enosys)
 	uint64_t ino = 42;
 	int ns = EXTATTR_NAMESPACE_USER;
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1);
 	expect_listxattr(ino, 0, ReturnErrno(ENOSYS));
 
 	ASSERT_EQ(-1, extattr_list_file(FULLPATH, ns, NULL, 0));
@@ -284,7 +284,7 @@ TEST_F(Listxattr, enotsup)
 	uint64_t ino = 42;
 	int ns = EXTATTR_NAMESPACE_USER;
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1);
 	expect_listxattr(ino, 0, ReturnErrno(ENOTSUP));
 
 	ASSERT_EQ(-1, extattr_list_file(FULLPATH, ns, NULL, 0));
@@ -308,7 +308,7 @@ TEST_F(Listxattr, erange)
 	uint64_t ino = 42;
 	int ns = EXTATTR_NAMESPACE_USER;
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1);
 	expect_listxattr(ino, 0, ReturnErrno(ERANGE));
 
 	ASSERT_EQ(-1, extattr_list_file(FULLPATH, ns, NULL, 0));
@@ -323,7 +323,7 @@ TEST_F(Listxattr, size_only_empty)
 	uint64_t ino = 42;
 	int ns = EXTATTR_NAMESPACE_USER;
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1);
 	expect_listxattr(ino, 0, ReturnImmediate([](auto i __unused, auto out) {
 		out->body.listxattr.size = 0;
 		SET_OUT_HEADER_LEN(out, listxattr);
@@ -344,7 +344,7 @@ TEST_F(Listxattr, size_only_nonempty)
 	uint64_t ino = 42;
 	int ns = EXTATTR_NAMESPACE_USER;
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1);
 	expect_listxattr(ino, 0, ReturnImmediate([](auto i __unused, auto out) {
 		out->body.listxattr.size = 45;
 		SET_OUT_HEADER_LEN(out, listxattr);
@@ -370,7 +370,7 @@ TEST_F(Listxattr, size_only_really_big)
 	uint64_t ino = 42;
 	int ns = EXTATTR_NAMESPACE_USER;
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1);
 	expect_listxattr(ino, 0, ReturnImmediate([](auto i __unused, auto out) {
 		out->body.listxattr.size = 16000;
 		SET_OUT_HEADER_LEN(out, listxattr);
@@ -404,7 +404,7 @@ TEST_F(Listxattr, user)
 	char expected[9] = {3, 'f', 'o', 'o', 4, 'b', 'a', 'n', 'g'};
 	char attrs[28] = "user.foo\0system.x\0user.bang";
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1);
 	expect_listxattr(ino, 0,
 		ReturnImmediate([&](auto in __unused, auto out) {
 			out->body.listxattr.size = sizeof(attrs);
@@ -438,7 +438,7 @@ TEST_F(Listxattr, system)
 	char expected[2] = {1, 'x'};
 	char attrs[28] = "user.foo\0system.x\0user.bang";
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1);
 	expect_listxattr(ino, 0,
 		ReturnImmediate([&](auto in __unused, auto out) {
 			out->body.listxattr.size = sizeof(attrs);
@@ -466,7 +466,7 @@ TEST_F(Removexattr, enoattr)
 	uint64_t ino = 42;
 	int ns = EXTATTR_NAMESPACE_USER;
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1);
 	expect_removexattr(ino, "user.foo", ENOATTR);
 
 	ASSERT_EQ(-1, extattr_delete_file(FULLPATH, ns, "foo"));
@@ -484,7 +484,7 @@ TEST_F(Removexattr, DISABLED_enosys)
 	uint64_t ino = 42;
 	int ns = EXTATTR_NAMESPACE_USER;
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1);
 	expect_removexattr(ino, "user.foo", ENOSYS);
 
 	ASSERT_EQ(-1, extattr_delete_file(FULLPATH, ns, "foo"));
@@ -501,7 +501,7 @@ TEST_F(Removexattr, user)
 	uint64_t ino = 42;
 	int ns = EXTATTR_NAMESPACE_USER;
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1);
 	expect_removexattr(ino, "user.foo", 0);
 
 	ASSERT_EQ(0, extattr_delete_file(FULLPATH, ns, "foo"))
@@ -514,7 +514,7 @@ TEST_F(Removexattr, system)
 	uint64_t ino = 42;
 	int ns = EXTATTR_NAMESPACE_SYSTEM;
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1);
 	expect_removexattr(ino, "system.foo", 0);
 
 	ASSERT_EQ(0, extattr_delete_file(FULLPATH, ns, "foo"))
@@ -535,7 +535,7 @@ TEST_F(Setxattr, DISABLED_enosys)
 	int ns = EXTATTR_NAMESPACE_USER;
 	ssize_t r;
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1);
 	expect_setxattr(ino, "user.foo", value, ReturnErrno(ENOSYS));
 
 	r = extattr_set_file(FULLPATH, ns, "foo", (void*)value, value_len);
@@ -560,7 +560,7 @@ TEST_F(Setxattr, enotsup)
 	int ns = EXTATTR_NAMESPACE_USER;
 	ssize_t r;
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1);
 	expect_setxattr(ino, "user.foo", value, ReturnErrno(ENOTSUP));
 
 	r = extattr_set_file(FULLPATH, ns, "foo", (void*)value, value_len);
@@ -579,7 +579,7 @@ TEST_F(Setxattr, user)
 	int ns = EXTATTR_NAMESPACE_USER;
 	ssize_t r;
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1);
 	expect_setxattr(ino, "user.foo", value, ReturnErrno(0));
 
 	r = extattr_set_file(FULLPATH, ns, "foo", (void*)value, value_len);
@@ -597,7 +597,7 @@ TEST_F(Setxattr, system)
 	int ns = EXTATTR_NAMESPACE_SYSTEM;
 	ssize_t r;
 
-	expect_lookup(RELPATH, ino, S_IFREG | 0644, 1);
+	expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1);
 	expect_setxattr(ino, "system.foo", value, ReturnErrno(0));
 
 	r = extattr_set_file(FULLPATH, ns, "foo", (void*)value, value_len);


More information about the svn-src-projects mailing list