From f7c5d10ce529d1e131113e155e3321d1fda1ebc2 Mon Sep 17 00:00:00 2001 From: Nikolaus Rath Date: Thu, 6 Apr 2017 11:47:06 -0700 Subject: passthrough, passthrough_fh: disable attribute caching Required for better hardlink handling, see comments in patch. --- example/passthrough.c | 12 ++++++++++++ example/passthrough_fh.c | 12 ++++++++++++ 2 files changed, 24 insertions(+) (limited to 'example') diff --git a/example/passthrough.c b/example/passthrough.c index 15f424a..22e7083 100644 --- a/example/passthrough.c +++ b/example/passthrough.c @@ -52,6 +52,18 @@ static void *xmp_init(struct fuse_conn_info *conn, { (void) conn; cfg->use_ino = 1; + + /* Pick up changes from lower filesystem right away. This is + also necessary for better hardlink support. When the kernel + calls the unlink() handler, it does not know the inode of + the to-be-removed entry and can therefore not invalidate + the cache of the associated inode - resulting in an + incorrect st_nlink value being reported for any remaining + hardlinks to this inode. */ + cfg->entry_timeout = 0; + cfg->attr_timeout = 0; + cfg->negative_timeout = 0; + return NULL; } diff --git a/example/passthrough_fh.c b/example/passthrough_fh.c index c807d75..372282e 100644 --- a/example/passthrough_fh.c +++ b/example/passthrough_fh.c @@ -57,6 +57,18 @@ static void *xmp_init(struct fuse_conn_info *conn, (void) conn; cfg->use_ino = 1; cfg->nullpath_ok = 1; + + /* Pick up changes from lower filesystem right away. This is + also necessary for better hardlink support. When the kernel + calls the unlink() handler, it does not know the inode of + the to-be-removed entry and can therefore not invalidate + the cache of the associated inode - resulting in an + incorrect st_nlink value being reported for any remaining + hardlinks to this inode. */ + cfg->entry_timeout = 0; + cfg->attr_timeout = 0; + cfg->negative_timeout = 0; + return NULL; } -- cgit v1.2.3