作者:ringtai
项目:fus
func (f benchFile) Open(ctx context.Context, req *fuse.OpenRequest, resp *fuse.OpenResponse) (fs.Handle, error) {
if f.conf.directIO {
resp.Flags |= fuse.OpenDirectIO
}
// TODO configurable?
resp.Flags |= fuse.OpenKeepCache
return f, nil
}
作者:seacoastbo
项目:fus
func (f benchFile) Open(req *fuse.OpenRequest, resp *fuse.OpenResponse, intr fs.Intr) (fs.Handle, fuse.Error) {
if f.conf.directIO {
resp.Flags |= fuse.OpenDirectIO
}
// TODO configurable?
resp.Flags |= fuse.OpenKeepCache
return f, nil
}
作者:conductan
项目:goh
func (f *File) Open(c context.Context, req *fuse.OpenRequest, resp *fuse.OpenResponse) (fs.Handle, error) {
defer log.Debugln("open:", f.dir.path, f.name, "resp=", resp, "flags=", resp.Flags)
resp.Flags =
fuse.OpenDirectIO | // git gives bus error when this is set
fuse.OpenNonSeekable |
fuse.OpenPurgeAttr |
fuse.OpenPurgeUBC
if req.Flags.IsReadOnly() {
// we don't need to track read-only handles
return f, nil
}
f.mu.Lock()
defer f.mu.Unlock()
if f.writers == 0 {
// load data
fn := func(b []byte) {
f.data = append([]byte(nil), b...)
}
if err := f.load(c, fn); err != nil {
return nil, err
}
}
f.writers++
return f, nil
}
作者:read-late
项目:fus
func (f *File) Open(ctx context.Context, req *fuse.OpenRequest, resp *fuse.OpenResponse) (fs.Handle, error) {
if !req.Flags.IsReadOnly() {
return nil, fuse.Errno(syscall.EACCES)
}
resp.Flags |= fuse.OpenKeepCache
return f, nil
}
作者:camlistor
项目:camlistor
// Empirically:
// open for read: req.Flags == 0
// open for append: req.Flags == 1
// open for write: req.Flags == 1
// open for read/write (+<) == 2 (bitmask? of?)
//
// open flags are O_WRONLY (1), O_RDONLY (0), or O_RDWR (2). and also
// bitmaks of O_SYMLINK (0x200000) maybe. (from
// fuse_filehandle_xlate_to_oflags in macosx/kext/fuse_file.h)
func (n *roFile) Open(ctx context.Context, req *fuse.OpenRequest, res *fuse.OpenResponse) (fs.Handle, error) {
roFileOpen.Incr()
if isWriteFlags(req.Flags) {
return nil, fuse.EPERM
}
log.Printf("roFile.Open: %v: content: %v dir=%v flags=%v", n.permanode, n.content, req.Dir, req.Flags)
r, err := schema.NewFileReader(n.fs.fetcher, n.content)
if err != nil {
roFileOpenError.Incr()
log.Printf("roFile.Open: %v", err)
return nil, fuse.EIO
}
// Turn off the OpenDirectIO bit (on by default in rsc fuse server.go),
// else append operations don't work for some reason.
res.Flags &= ^fuse.OpenDirectIO
// Read-only.
nod := &node{
fs: n.fs,
blobref: n.content,
}
return &nodeReader{n: nod, fr: r}, nil
}
作者:Microsof
项目:hdfs-moun
// Responds on FUSE Open request for a file inside zip archive
func (this *ZipFile) Open(ctx context.Context, req *fuse.OpenRequest, resp *fuse.OpenResponse) (fs.Handle, error) {
contentStream, err := this.zipFile.Open()
if err != nil {
return nil, err
}
// reporting to FUSE that the stream isn't seekable
resp.Flags |= fuse.OpenNonSeekable
return NewZipFileHandle(contentStream), nil
}
作者:keybas
项目:kbfs-bet
// Open implements the fs.NodeOpener interface for SpecialReadFile.
func (f *SpecialReadFile) Open(ctx context.Context, req *fuse.OpenRequest,
resp *fuse.OpenResponse) (fs.Handle, error) {
data, _, err := f.read(ctx)
if err != nil {
return nil, err
}
resp.Flags |= fuse.OpenDirectIO
return fs.DataHandle(data), nil
}
作者:read-late
项目:bazi
func (f *file) Open(ctx context.Context, req *fuse.OpenRequest, resp *fuse.OpenResponse) (fs.Handle, error) {
// allow kernel to use buffer cache
resp.Flags &^= fuse.OpenDirectIO
f.mu.Lock()
defer f.mu.Unlock()
tmp := f.handles + 1
if tmp == 0 {
return nil, fuse.Errno(syscall.ENFILE)
}
f.handles = tmp
return f, nil
}
作者:marcopaganin
项目:rclon
// Open the file for read or write
func (f *File) Open(ctx context.Context, req *fuse.OpenRequest, resp *fuse.OpenResponse) (fusefs.Handle, error) {
// if o is nil it isn't valid yet
o, err := f.waitForValidObject()
if err != nil {
return nil, err
}
fs.Debug(o, "File.Open")
switch {
case req.Flags.IsReadOnly():
if noSeek {
resp.Flags |= fuse.OpenNonSeekable
}
return newReadFileHandle(o)
case req.Flags.IsWriteOnly():
resp.Flags |= fuse.OpenNonSeekable
src := newCreateInfo(f.d.f, o.Remote())
fh, err := newWriteFileHandle(f.d, f, src)
if err != nil {
return nil, err
}
return fh, nil
case req.Flags.IsReadWrite():
return nil, errors.New("can't open read and write")
}
/*
// File was opened in append-only mode, all writes will go to end
// of file. OS X does not provide this information.
OpenAppend OpenFlags = syscall.O_APPEND
OpenCreate OpenFlags = syscall.O_CREAT
OpenDirectory OpenFlags = syscall.O_DIRECTORY
OpenExclusive OpenFlags = syscall.O_EXCL
OpenNonblock OpenFlags = syscall.O_NONBLOCK
OpenSync OpenFlags = syscall.O_SYNC
OpenTruncate OpenFlags = syscall.O_TRUNC
*/
return nil, errors.New("can't figure out how to open")
}
作者:rfjako
项目:cluef
func (f *File) Open(ctx context.Context, req *fuse.OpenRequest, resp *fuse.OpenResponse) (fusefs.Handle, error) {
op := NewOpenOp(req, f.path)
defer trace(op)
newfile := NewFile(f.parent, f.name, f.fs)
size, err := newfile.doOpen(f.path, req.Flags)
if err != nil {
return nil, err
}
resp.Handle = newfile.handleID
op.FileSize = size
op.BlockSize = newfile.blksize
return newfile, nil
}
作者:bweste
项目:consulf
// Open implements the NodeOpener interface. It is called the first time a file is opened
// by any process. Further opens or FD duplications will reuse this handle. When all FDs
// have been closed, Release() will be called.
func (file *consulFile) Open(
ctx context.Context,
req *fuse.OpenRequest,
resp *fuse.OpenResponse,
) (fs.Handle, error) {
// Using the DirectIO flag disables the kernel buffer cache. *Every* read and write
// will be passed directly to this module. This gives the module greater control over
// the file's consistency model.
resp.Flags |= fuse.OpenDirectIO
file.Mutex.Lock()
defer file.Mutex.Unlock()
file.IsOpen = true
return file, nil
}
作者:rfjako
项目:cluef
func (d *Dir) Open(ctx context.Context, req *fuse.OpenRequest, resp *fuse.OpenResponse) (fusefs.Handle, error) {
op := NewOpenOp(req, d.path)
defer trace(op)
newdir := NewDir(d.parent, d.name, d.fs)
size, err := newdir.doOpen(d.path, req.Flags)
if err != nil {
return nil, err
}
newdir.SetProcessInfo(req.Header)
resp.Handle = newdir.handleID
op.FileSize = size
op.BlockSize = newdir.blksize
return newdir, nil
}
作者:funkyga
项目:gafk
func (f *File) Open(ctx context.Context, req *fuse.OpenRequest,
resp *fuse.OpenResponse) (fs.Handle, error) {
log.Trace("File Open, req=%#v, topic=%s, partitionId=%d", req,
f.topic, f.partitionId)
// Allow kernel to use buffer cache
resp.Flags &^= fuse.OpenDirectIO
f.opened = true
f.closeCh = make(chan struct{})
go f.readContent()
time.Sleep(time.Second * 2) // TODO
return f, nil
}
作者:ryanstou
项目:mirrorf
func (file *File) Open(req *fuse.OpenRequest, res *fuse.OpenResponse, intr fs.Intr) (fs.Handle, fuse.Error) {
fmt.Printf("Open with: %d - %d\n", req.Flags, int(req.Flags))
// Allow kernel to use buffer cache
res.Flags &^= fuse.OpenDirectIO
fsHandle, err := os.OpenFile(file.Path, int(req.Flags), 0)
handle := &FileHandle{fsHandle, file}
if err != nil {
return nil, err
}
return handle, nil
}
作者:dankomiocevi
项目:mulif
func (f *File) Open(ctx context.Context, req *fuse.OpenRequest, resp *fuse.OpenResponse) (fs.Handle, error) {
glog.Infof("Entered Open with file name: %s.\n", f.name)
if f.name == ".description" {
return &FileHandle{r: nil, f: f}, nil
}
if f.name[0] == '.' {
return nil, fuse.EPERM
}
if runtime.GOOS == "darwin" {
resp.Flags |= fuse.OpenDirectIO
}
if req.Flags.IsReadOnly() {
glog.Info("Open: File requested is read only.\n")
}
if req.Flags.IsReadWrite() {
glog.Info("Open: File requested is read write.\n")
}
if req.Flags.IsWriteOnly() {
glog.Info("Open: File requested is write only.\n")
}
var err error
var songPath string
if f.artist == "drop" {
songPath, err = store.GetDropFilePath(f.name, f.mPoint)
PushFileItem(*f, DelayedVoid)
} else if f.artist == "playlists" {
songPath, err = store.GetPlaylistFilePath(f.album, f.name, f.mPoint)
PushFileItem(*f, DelayedVoid)
} else {
songPath, err = store.GetFilePath(f.artist, f.album, f.name)
}
if err != nil {
glog.Error(err)
return nil, err
}
r, err := os.OpenFile(songPath, int(req.Flags), 0666)
if err != nil {
return nil, err
}
return &FileHandle{r: r, f: f}, nil
}
作者:saakaifoundr
项目:pachyder
func (f *file) Open(ctx context.Context, request *fuse.OpenRequest, response *fuse.OpenResponse) (_ fs.Handle, retErr error) {
defer func() {
if retErr == nil {
protolion.Debug(&FileOpen{&f.Node, errorToString(retErr)})
} else {
protolion.Error(&FileOpen{&f.Node, errorToString(retErr)})
}
}()
response.Flags |= fuse.OpenDirectIO | fuse.OpenNonSeekable
fileInfo, err := f.fs.apiClient.InspectFileUnsafe(
f.File.Commit.Repo.Name,
f.File.Commit.ID,
f.File.Path,
f.fs.getFromCommitID(f.getRepoOrAliasName()),
f.Shard,
f.fs.handleID,
)
if err != nil {
return nil, err
}
return f.newHandle(int(fileInfo.SizeBytes)), nil
}
作者:chenchu
项目:cgroupf
func (sf StatFile) Open(ctx context.Context, req *fuse.OpenRequest, resp *fuse.OpenResponse) (fs.Handle, error) {
resp.Flags |= fuse.OpenDirectIO
return sf, nil
}
作者:chenchu
项目:cgroupf
func (ds DiskStatsFile) Open(ctx context.Context, req *fuse.OpenRequest, resp *fuse.OpenResponse) (fusefs.Handle, error) {
resp.Flags |= fuse.OpenDirectIO
return ds, nil
}
作者:orive
项目:ghf
func (f *File) Open(ctx context.Context, req *fuse.OpenRequest, resp *fuse.OpenResponse) (fs.Handle, error) {
resp.Flags |= fuse.OpenNonSeekable
return &FileHandle{r: base64.NewDecoder(base64.StdEncoding, strings.NewReader(*f.Content.Content))}, nil
}
作者:voidExceptio
项目:bazi
func (f *file) Open(req *fuse.OpenRequest, resp *fuse.OpenResponse, intr fs.Intr) (fs.Handle, fuse.Error) {
// allow kernel to use buffer cache
resp.Flags &^= fuse.OpenDirectIO
return f, nil
}