From 6257276d9de3f15643f159b2ec627a67c84fc23d Mon Sep 17 00:00:00 2001 From: Raghavendra Gowdappa Date: Fri, 12 Oct 2018 10:31:04 +0530 Subject: api: fill out attribute information if not valid translators like readdir-ahead selectively retain entry information of iatt (gfid and type) when rest of the iatt is invalidated (for write invalidating ia_size, (m)(c)times etc). Fuse-bridge uses this information and sends only entry information in readdirplus response. However such option doesn't exist in gfapi. This patch modifies gfapi to populate the stat by forcing an extra lookup. Thanks to Shyamsundar Ranganathan and Prashanth Pai for tests. Change-Id: Ieb5f8fc76359c327627b7d8420aaf20810e53000 Fixes: bz#1630804 Signed-off-by: Raghavendra Gowdappa Signed-off-by: Soumya Koduri --- tests/bugs/gfapi/bug-1630804/gfapi-bz1630804.c | 112 +++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 tests/bugs/gfapi/bug-1630804/gfapi-bz1630804.c (limited to 'tests/bugs/gfapi/bug-1630804/gfapi-bz1630804.c') diff --git a/tests/bugs/gfapi/bug-1630804/gfapi-bz1630804.c b/tests/bugs/gfapi/bug-1630804/gfapi-bz1630804.c new file mode 100644 index 00000000000..d151784627c --- /dev/null +++ b/tests/bugs/gfapi/bug-1630804/gfapi-bz1630804.c @@ -0,0 +1,112 @@ +#include +#include +#include +#include +#include +#include +#include + +#define VALIDATE_AND_GOTO_LABEL_ON_ERROR(func, ret, label) \ + do { \ + if (ret < 0) { \ + fprintf(stderr, "%s : returned error %d (%s)\n", func, ret, \ + strerror(errno)); \ + goto label; \ + } \ + } while (0) + +int +main(int argc, char *argv[]) +{ + int ret = -1; + int flags = O_WRONLY | O_CREAT | O_TRUNC; + int do_write = 0; + glfs_t *fs = NULL; + glfs_fd_t *fd1 = NULL; + glfs_fd_t *fd2 = NULL; + char *volname = NULL; + char *logfile = NULL; + const char *dirname = "/some_dir1"; + const char *filename = "/some_dir1/testfile"; + const char *short_filename = "testfile"; + struct stat sb; + char buf[512]; + struct dirent *entry = NULL; + + if (argc != 4) { + fprintf(stderr, "Invalid argument\n"); + fprintf(stderr, "Usage: %s d_name, short_filename)) { + if (sb.st_mode == 0) { + fprintf( + stderr, + "Mode bits are incorrect: d_name - %s, st_mode - %jd\n", + entry->d_name, (intmax_t)sb.st_mode); + ret = -1; + goto out; + } + } + } + } while (entry != NULL); + +out: + if (fd1 != NULL) + glfs_close(fd1); + if (fd2 != NULL) + glfs_closedir(fd2); + + if (fs) { + /* + * If this fails (as it does on Special Snowflake NetBSD for no + * good reason), it shouldn't affect the result of the test. + */ + (void)glfs_fini(fs); + } + + return ret; +} -- cgit