Implemented GetInodeAttributes.

geesefs-0-30-9
Aaron Jacobs 2015-03-17 13:46:15 +11:00
parent 968b5dd71a
commit dc5f8ae4bc
1 changed files with 42 additions and 0 deletions

View File

@ -153,6 +153,14 @@ func (fs *cachingFS) barID() fuse.InodeID {
return fs.baseID + barOffset
}
// LOCKS_REQUIRED(fs.mu)
func (fs *cachingFS) rootAttrs() fuse.InodeAttributes {
return fuse.InodeAttributes{
Mode: os.ModeDir | 0777,
Mtime: fs.mtime,
}
}
// LOCKS_REQUIRED(fs.mu)
func (fs *cachingFS) fooAttrs() fuse.InodeAttributes {
return fuse.InodeAttributes{
@ -290,3 +298,37 @@ func (fs *cachingFS) LookUpInode(
return
}
// LOCKS_EXCLUDED(fs.mu)
func (fs *cachingFS) GetInodeAttributes(
ctx context.Context,
req *fuse.GetInodeAttributesRequest) (
resp *fuse.GetInodeAttributesResponse, err error) {
resp = &fuse.GetInodeAttributesResponse{}
fs.mu.Lock()
defer fs.mu.Unlock()
// Figure out which inode the request is for.
var attrs fuse.InodeAttributes
switch {
case req.Inode == fuse.RootInodeID:
attrs = fs.rootAttrs()
case req.Inode%numInodes == fooOffset:
attrs = fs.fooAttrs()
case req.Inode%numInodes == dirOffset:
attrs = fs.dirAttrs()
case req.Inode%numInodes == barOffset:
attrs = fs.barAttrs()
}
// Fill in the response.
resp.Attributes = attrs
resp.AttributesExpiration = time.Now().Add(fs.getattrTimeout)
return
}