* Vivek Goyal (vgo...@redhat.com) wrote: > On Mon, Jun 28, 2021 at 04:49:02PM +0100, Dr. David Alan Gilbert wrote: > > * Vivek Goyal (vgo...@redhat.com) wrote: > > > Add the bits to enable support for setxattr_ext if fuse offers it. Do not > > > enable it by default yet. Let passthrough_ll opt-in. Enabling it by > > > deafult > > > kind of automatically means that you are taking responsibility of clearing > > > SGID if ACL is set. > > > > > > Signed-off-by: Vivek Goyal <vgo...@redhat.com> > > > --- > > > tools/virtiofsd/fuse_common.h | 5 +++++ > > > tools/virtiofsd/fuse_lowlevel.c | 11 ++++++++++- > > > tools/virtiofsd/fuse_lowlevel.h | 3 ++- > > > tools/virtiofsd/passthrough_ll.c | 3 ++- > > > 4 files changed, 19 insertions(+), 3 deletions(-) > > > > > > diff --git a/tools/virtiofsd/fuse_common.h b/tools/virtiofsd/fuse_common.h > > > index 0c2665b977..8abac80098 100644 > > > --- a/tools/virtiofsd/fuse_common.h > > > +++ b/tools/virtiofsd/fuse_common.h > > > @@ -377,6 +377,11 @@ struct fuse_file_info { > > > */ > > > #define FUSE_CAP_SETXATTR_EXT (1 << 29) > > > > > > +/** > > > + * Indicates that file server supports extended struct fuse_setxattr_in > > > + */ > > > +#define FUSE_CAP_SETXATTR_EXT (1 << 29) > > > + > > > > You already added that in 1/7 - but other than that, > > Good catch. Do I need to repost patch/series due to this change or this > is something you can take care of while applying patches.
I can fix it. Dave > Vivek > > > > > > > Reviewed-by: Dr. David Alan Gilbert <dgilb...@redhat.com> > > > > > /** > > > * Ioctl flags > > > * > > > diff --git a/tools/virtiofsd/fuse_lowlevel.c > > > b/tools/virtiofsd/fuse_lowlevel.c > > > index c2b6ff1686..d1e24c013f 100644 > > > --- a/tools/virtiofsd/fuse_lowlevel.c > > > +++ b/tools/virtiofsd/fuse_lowlevel.c > > > @@ -1439,7 +1439,9 @@ static void do_setxattr(fuse_req_t req, fuse_ino_t > > > nodeid, > > > } > > > > > > if (req->se->op.setxattr) { > > > - req->se->op.setxattr(req, nodeid, name, value, arg->size, > > > arg->flags); > > > + uint32_t setxattr_flags = setxattr_ext ? arg->setxattr_flags : 0; > > > + req->se->op.setxattr(req, nodeid, name, value, arg->size, > > > arg->flags, > > > + setxattr_flags); > > > } else { > > > fuse_reply_err(req, ENOSYS); > > > } > > > @@ -1986,6 +1988,9 @@ static void do_init(fuse_req_t req, fuse_ino_t > > > nodeid, > > > if (arg->flags & FUSE_HANDLE_KILLPRIV_V2) { > > > se->conn.capable |= FUSE_CAP_HANDLE_KILLPRIV_V2; > > > } > > > + if (arg->flags & FUSE_SETXATTR_EXT) { > > > + se->conn.capable |= FUSE_CAP_SETXATTR_EXT; > > > + } > > > #ifdef HAVE_SPLICE > > > #ifdef HAVE_VMSPLICE > > > se->conn.capable |= FUSE_CAP_SPLICE_WRITE | FUSE_CAP_SPLICE_MOVE; > > > @@ -2121,6 +2126,10 @@ static void do_init(fuse_req_t req, fuse_ino_t > > > nodeid, > > > outarg.flags |= FUSE_HANDLE_KILLPRIV_V2; > > > } > > > > > > + if (se->conn.want & FUSE_CAP_SETXATTR_EXT) { > > > + outarg.flags |= FUSE_SETXATTR_EXT; > > > + } > > > + > > > fuse_log(FUSE_LOG_DEBUG, " INIT: %u.%u\n", outarg.major, > > > outarg.minor); > > > fuse_log(FUSE_LOG_DEBUG, " flags=0x%08x\n", outarg.flags); > > > fuse_log(FUSE_LOG_DEBUG, " max_readahead=0x%08x\n", > > > outarg.max_readahead); > > > diff --git a/tools/virtiofsd/fuse_lowlevel.h > > > b/tools/virtiofsd/fuse_lowlevel.h > > > index 3bf786b034..4b4e8c9724 100644 > > > --- a/tools/virtiofsd/fuse_lowlevel.h > > > +++ b/tools/virtiofsd/fuse_lowlevel.h > > > @@ -798,7 +798,8 @@ struct fuse_lowlevel_ops { > > > * fuse_reply_err > > > */ > > > void (*setxattr)(fuse_req_t req, fuse_ino_t ino, const char *name, > > > - const char *value, size_t size, int flags); > > > + const char *value, size_t size, int flags, > > > + uint32_t setxattr_flags); > > > > > > /** > > > * Get an extended attribute > > > diff --git a/tools/virtiofsd/passthrough_ll.c > > > b/tools/virtiofsd/passthrough_ll.c > > > index ec91b3c133..9f5cd98fb5 100644 > > > --- a/tools/virtiofsd/passthrough_ll.c > > > +++ b/tools/virtiofsd/passthrough_ll.c > > > @@ -2955,7 +2955,8 @@ out: > > > } > > > > > > static void lo_setxattr(fuse_req_t req, fuse_ino_t ino, const char > > > *in_name, > > > - const char *value, size_t size, int flags) > > > + const char *value, size_t size, int flags, > > > + uint32_t extra_flags) > > > { > > > char procname[64]; > > > const char *name; > > > -- > > > 2.25.4 > > > > > -- > > Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK > > > -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK