aboutsummaryrefslogtreecommitdiff
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
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.
-rw-r--r--cache.c8
-rw-r--r--sshfs.c4
2 files changed, 12 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
}
diff --git a/sshfs.c b/sshfs.c
index 9fb68af..f41d987 100644
--- a/sshfs.c
+++ b/sshfs.c
@@ -3373,6 +3373,10 @@ static struct fuse_cache_operations sshfs_oper = {
.ftruncate = sshfs_ftruncate,
.fgetattr = sshfs_fgetattr,
#endif
+#if FUSE_VERSION >= 29
+ .flag_nullpath_ok = 1,
+ .flag_nopath = 1,
+#endif
},
.cache_getdir = sshfs_getdir,
};