aboutsummaryrefslogtreecommitdiff
path: root/example
diff options
context:
space:
mode:
Diffstat (limited to 'example')
-rw-r--r--example/passthrough.c12
-rw-r--r--example/passthrough_fh.c12
2 files changed, 24 insertions, 0 deletions
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;
}