diff options
author | Alan Somers <asomers@FreeBSD.org> | 2019-05-29 16:39:52 +0000 |
---|---|---|
committer | Alan Somers <asomers@FreeBSD.org> | 2019-05-29 16:39:52 +0000 |
commit | a4856c96d0e0c6a41d48c3fd43c139c8ab0857c1 (patch) | |
tree | ba72a4a38c8a39402db3d642dcdfc5353d76a374 /sys/fs/fuse/fuse_internal.c | |
parent | e039bafa878e37bbebbb421da01922f9e2811d2e (diff) | |
download | src-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.c | 14 |
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; |