aboutsummaryrefslogtreecommitdiff
path: root/sys/fs/fuse/fuse_internal.c
diff options
context:
space:
mode:
authorAlan Somers <asomers@FreeBSD.org>2019-05-29 16:39:52 +0000
committerAlan Somers <asomers@FreeBSD.org>2019-05-29 16:39:52 +0000
commita4856c96d0e0c6a41d48c3fd43c139c8ab0857c1 (patch)
treeba72a4a38c8a39402db3d642dcdfc5353d76a374 /sys/fs/fuse/fuse_internal.c
parente039bafa878e37bbebbb421da01922f9e2811d2e (diff)
downloadsrc-a4856c96d0e0c6a41d48c3fd43c139c8ab0857c1.tar.gz
src-a4856c96d0e0c6a41d48c3fd43c139c8ab0857c1.zip
fusefs: raise protocol level to 7.12
This commit raises the protocol level and adds backwards-compatibility code to handle structure size changes. It doesn't implement any new features. The new features added in protocol 7.12 are: * server-side umask processing (which FreeBSD won't do) * asynchronous inode and directory entry invalidation (which I'll do next) Sponsored by: The FreeBSD Foundation
Notes
Notes: svn path=/projects/fuse2/; revision=348365
Diffstat (limited to 'sys/fs/fuse/fuse_internal.c')
-rw-r--r--sys/fs/fuse/fuse_internal.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/sys/fs/fuse/fuse_internal.c b/sys/fs/fuse/fuse_internal.c
index 575530d4387c..ff001029c9b4 100644
--- a/sys/fs/fuse/fuse_internal.c
+++ b/sys/fs/fuse/fuse_internal.c
@@ -331,12 +331,22 @@ int
fuse_internal_mknod(struct vnode *dvp, struct vnode **vpp,
struct componentname *cnp, struct vattr *vap)
{
+ struct fuse_data *data;
struct fuse_mknod_in fmni;
+ size_t insize;
+
+ data = fuse_get_mpdata(dvp->v_mount);
fmni.mode = MAKEIMODE(vap->va_type, vap->va_mode);
fmni.rdev = vap->va_rdev;
+ if (fuse_libabi_geq(data, 7, 12)) {
+ insize = sizeof(fmni);
+ fmni.umask = curthread->td_proc->p_fd->fd_cmask;
+ } else {
+ insize = FUSE_COMPAT_MKNOD_IN_SIZE;
+ }
return (fuse_internal_newentry(dvp, vpp, cnp, FUSE_MKNOD, &fmni,
- sizeof(fmni), vap->va_type));
+ insize, vap->va_type));
}
/* readdir */
@@ -824,6 +834,8 @@ fuse_internal_send_init(struct fuse_data *data, struct thread *td)
* Unsupported features:
* FUSE_FILE_OPS: No known FUSE server or client supports it
* FUSE_ATOMIC_O_TRUNC: our VFS cannot support it
+ * FUSE_DONT_MASK: unlike Linux, FreeBSD always applies the umask, even
+ * when default ACLs are in use.
*/
fiii->flags = FUSE_ASYNC_READ | FUSE_POSIX_LOCKS | FUSE_EXPORT_SUPPORT
| FUSE_BIG_WRITES;