From: Nikolaus Rath Date: Thu, 6 Apr 2017 18:47:06 +0000 (-0700) Subject: passthrough, passthrough_fh: disable attribute caching X-Git-Tag: fuse-3.0.1~11 X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=f7c5d10ce529d1e131113e155e3321d1fda1ebc2;p=qemu-gpiodev%2Flibfuse.git passthrough, passthrough_fh: disable attribute caching Required for better hardlink handling, see comments in patch. --- 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; }