From b6e50a19532061a4744874dd8cb4b6fac05cdd89 Mon Sep 17 00:00:00 2001 From: Aaron Jacobs Date: Tue, 3 Mar 2015 09:39:01 +1100 Subject: [PATCH] Implemented fs.allocateInode. --- samples/memfs/fs.go | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/samples/memfs/fs.go b/samples/memfs/fs.go index beacbf2..5340c75 100644 --- a/samples/memfs/fs.go +++ b/samples/memfs/fs.go @@ -147,7 +147,24 @@ func (fs *memFS) getInodeForReadingOrDie(id fuse.InodeID) (inode *inode) { // // EXCLUSIVE_LOCKS_REQUIRED(fs.mu) // EXCLUSIVE_LOCK_FUNCTION(inode.mu) -func (fs *memFS) allocateInode(mode os.FileMode) (id fuse.InodeID, inode *inode) +func (fs *memFS) allocateInode( + mode os.FileMode) (id fuse.InodeID, inode *inode) { + // Create the inode. + inode = newInode(mode) + + // Re-use a free ID if possible. Otherwise mint a new one. + numFree := len(fs.freeInodes) + if numFree != 0 { + id = fs.freeInodes[numFree-1] + fs.freeInodes = fs.freeInodes[:numFree-1] + fs.inodes[id] = inode + } else { + id = fuse.InodeID(len(fs.inodes)) + fs.inodes = append(fs.inodes, inode) + } + + return +} func (fs *memFS) LookUpInode( ctx context.Context,