func (c *serveConn) saveLookup(s *fuse.LookupResponse, snode *serveNode, elem string, n2 Node) { name := path.Join(snode.name, elem) var sn *serveNode s.Node, s.Generation, sn = c.saveNode(name, n2) if s.EntryValid == 0 { s.EntryValid = 1 * time.Minute } if s.AttrValid == 0 { s.AttrValid = 1 * time.Minute } s.Attr = sn.attr() }
func (c *serveConn) saveLookup(s *fuse.LookupResponse, snode *serveNode, elem string, n2 Node) { s.Attr = nodeAttr(n2) if s.Attr.Inode == 0 { s.Attr.Inode = c.dynamicInode(snode.inode, elem) } s.Node, s.Generation = c.saveNode(s.Attr.Inode, n2) if s.EntryValid == 0 { s.EntryValid = entryValidTime } if s.AttrValid == 0 { s.AttrValid = attrValidTime } }
func (d *Dir) Lookup(ctx context.Context, req *fuse.LookupRequest, resp *fuse.LookupResponse) (fusefs.Node, error) { if skipDirEntry(req.Name) { return nil, fuse.ENOENT } path := filepath.Join(d.path, req.Name) isDir := false defer trace(NewLookupOp(req, path, isDir)) var st syscall.Stat_t if err := syscall.Lstat(path, &st); err != nil { return nil, fuse.ENOENT } resp.Attr = statToFuseAttr(st) resp.Node = fuse.NodeID(resp.Attr.Inode) // TODO: should we overwrite resp.EntryValid? // resp.EntryValid = time.Duration(500) * time.Millisecond if isDir = resp.Attr.Mode.IsDir(); isDir { return NewDir(d.path, req.Name, d.fs), nil } return NewFile(d.path, req.Name, d.fs), nil }