// LOCKS_EXCLUDED(fs.mu) func (fs *cachingFS) GetInodeAttributes( ctx context.Context, op *fuseops.GetInodeAttributesOp) (err error) { fs.mu.Lock() defer fs.mu.Unlock() // Figure out which inode the request is for. var attrs fuseops.InodeAttributes switch { case op.Inode == fuseops.RootInodeID: attrs = fs.rootAttrs() case op.Inode%numInodes == fooOffset: attrs = fs.fooAttrs() case op.Inode%numInodes == dirOffset: attrs = fs.dirAttrs() case op.Inode%numInodes == barOffset: attrs = fs.barAttrs() } // Fill in the response. op.Attributes = attrs op.AttributesExpiration = time.Now().Add(fs.getattrTimeout) return }
func (fs *Goofys) GetInodeAttributes( ctx context.Context, op *fuseops.GetInodeAttributesOp) (err error) { fs.mu.Lock() inode := fs.getInodeOrDie(op.Inode) fs.mu.Unlock() attr, err := inode.GetAttributes(fs) op.Attributes = *attr op.AttributesExpiration = time.Now().Add(365 * 24 * time.Hour) return }
func (fs *memFS) GetInodeAttributes( op *fuseops.GetInodeAttributesOp) (err error) { fs.mu.Lock() defer fs.mu.Unlock() // Grab the inode. inode := fs.getInodeOrDie(op.Inode) // Fill in the response. op.Attributes = inode.attrs // We don't spontaneously mutate, so the kernel can cache as long as it wants // (since it also handles invalidation). op.AttributesExpiration = fs.clock.Now().Add(365 * 24 * time.Hour) return }