virtiofsd: Add support for extended setxattr
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 <vgoyal@redhat.com> Message-Id: <20210622150852.1507204-4-vgoyal@redhat.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Fixed up double def in fuse_common.h
This commit is contained in:
parent
5290fb625d
commit
c46ef954fa
@ -1445,7 +1445,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);
|
||||
}
|
||||
@ -1992,6 +1994,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;
|
||||
@ -2127,6 +2132,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);
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user