aboutsummaryrefslogtreecommitdiff
path: root/cache.c
diff options
context:
space:
mode:
authorRian Hunter <rian@alum.mit.edu>2016-06-01 23:21:46 -0700
committerRian Hunter <rian@alum.mit.edu>2016-06-01 23:27:01 -0700
commit74bfa3850a2568f96dd1d090a9386534c9bb4629 (patch)
treea550c8181a064a1d8c313ef89c4d55eb42c53e0f /cache.c
parent0f6f33b1b4084426a78035788e5e8502a3dc5af0 (diff)
downloadsshfs-74bfa3850a2568f96dd1d090a9386534c9bb4629.tar
sshfs-74bfa3850a2568f96dd1d090a9386534c9bb4629.tar.gz
sshfs-74bfa3850a2568f96dd1d090a9386534c9bb4629.tar.bz2
sshfs-74bfa3850a2568f96dd1d090a9386534c9bb4629.zip
Support the lack of paths when cache is off
Before FUSE 2.9, FUSE had to emulate unlink() if a file was still open via renaming to a hidden file. This was due to the requirement that a valid "path" argument must be submitted for many FUSE operations. FUSE 2.9 introduced the flag_nullpath_ok and flag_nopath flags that allow a FUSE file system to signal to FUSE that the "path" argument may be NULL in certain operations. sshfs doesn't require paths if the cache isn't used so communicate that information to the FUSE layer.
Diffstat (limited to 'cache.c')
-rw-r--r--cache.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/cache.c b/cache.c
index aeb14ec..34a87ca 100644
--- a/cache.c
+++ b/cache.c
@@ -523,6 +523,10 @@ static void cache_unity_fill(struct fuse_cache_operations *oper,
cache_oper->ftruncate = oper->oper.ftruncate;
cache_oper->fgetattr = oper->oper.fgetattr;
#endif
+#if FUSE_VERSION >= 29
+ cache_oper->flag_nullpath_ok = oper->oper.flag_nullpath_ok;
+ cache_oper->flag_nopath = oper->oper.flag_nopath;
+#endif
}
static void cache_fill(struct fuse_cache_operations *oper,
@@ -548,6 +552,10 @@ static void cache_fill(struct fuse_cache_operations *oper,
cache_oper->ftruncate = oper->oper.ftruncate ? cache_ftruncate : NULL;
cache_oper->fgetattr = oper->oper.fgetattr ? cache_fgetattr : NULL;
#endif
+#if FUSE_VERSION >= 29
+ cache_oper->flag_nullpath_ok = 0;
+ cache_oper->flag_nopath = 0;
+#endif
}