func (n *pathInode) Chown(file nodefs.File, uid uint32, gid uint32, context *fuse.Context) (code fuse.Status) { // Note that Linux currently (Linux 4.4) DOES NOT pass a file descriptor // to FUSE for fchown. We still check because it may change in the future. if file != nil { code = file.Chown(uid, gid) if code != fuse.ENOSYS { return code } } files := n.Inode().Files(fuse.O_ANYWRITE) for _, f := range files { // TODO - pass context code = f.Chown(uid, gid) if code.Ok() { return code } } if len(files) == 0 || code == fuse.ENOSYS || code == fuse.EBADF { // TODO - can we get just FATTR_GID but not FATTR_UID ? code = n.fs.Chown(n.GetPath(), uid, gid, context) } return code }