Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion sys/fs/fuse/fuse_internal.c
Original file line number Diff line number Diff line change
Expand Up @@ -1063,6 +1063,11 @@ fuse_internal_init_callback(struct fuse_ticket *tick, struct uio *uio)
if (!fuse_libabi_geq(data, 7, 28))
fsess_set_notimpl(data->mp, FUSE_COPY_FILE_RANGE);

if (fuse_libabi_geq(data, 7, 33)) {
if (fiio->flags & FUSE_SETXATTR_EXT)
data->dataflags |= FSESS_SETXATTR_EXT;
}

out:
if (err) {
fdata_set_dead(data);
Expand Down Expand Up @@ -1115,7 +1120,8 @@ fuse_internal_send_init(struct fuse_data *data, struct thread *td)
*/
fiii->flags = FUSE_ASYNC_READ | FUSE_POSIX_LOCKS | FUSE_EXPORT_SUPPORT
| FUSE_BIG_WRITES | FUSE_WRITEBACK_CACHE
| FUSE_NO_OPEN_SUPPORT | FUSE_NO_OPENDIR_SUPPORT;
| FUSE_NO_OPEN_SUPPORT | FUSE_NO_OPENDIR_SUPPORT
| FUSE_SETXATTR_EXT;

fuse_insert_callback(fdi.tick, fuse_internal_init_callback);
fuse_insert_message(fdi.tick, false);
Expand Down
1 change: 1 addition & 0 deletions sys/fs/fuse/fuse_ipc.h
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,7 @@ struct fuse_data {
#define FSESS_MNTOPTS_MASK ( \
FSESS_DAEMON_CAN_SPY | FSESS_PUSH_SYMLINKS_IN | \
FSESS_DEFAULT_PERMISSIONS | FSESS_INTR)
#define FSESS_SETXATTR_EXT 0x8000000 /* extended fuse_setxattr_in */

extern int fuse_data_cache_mode;

Expand Down
4 changes: 2 additions & 2 deletions sys/fs/fuse/fuse_vnops.c
Original file line number Diff line number Diff line change
Expand Up @@ -2777,7 +2777,7 @@ fuse_vnop_setextattr(struct vop_setextattr_args *ap)
strlen(ap->a_name) + 1;

/* older FUSE servers use a smaller fuse_setxattr_in struct*/
if (fuse_libabi_geq(fuse_get_mpdata(mp), 7, 33))
if (fuse_get_mpdata(mp)->dataflags & FSESS_SETXATTR_EXT)
struct_size = sizeof(*set_xattr_in);

fdisp_init(&fdi, len + struct_size + uio->uio_resid);
Expand All @@ -2786,7 +2786,7 @@ fuse_vnop_setextattr(struct vop_setextattr_args *ap)
set_xattr_in = fdi.indata;
set_xattr_in->size = uio->uio_resid;

if (fuse_libabi_geq(fuse_get_mpdata(mp), 7, 33)) {
if (fuse_get_mpdata(mp)->dataflags & FSESS_SETXATTR_EXT) {
set_xattr_in->setxattr_flags = 0;
set_xattr_in->padding = 0;
}
Expand Down
Loading