func (t *FileTest) createInode() { if t.in != nil { t.in.Unlock() } t.in = inode.NewFileInode( fileInodeID, t.backingObj, fuseops.InodeAttributes{ Uid: uid, Gid: gid, Mode: fileMode, }, t.bucket, gcsx.NewSyncer( 1, // Append threshold ".gcsfuse_tmp/", t.bucket), "", &t.clock) t.in.Lock() }
// Implementation detail of lookUpOrCreateInodeIfNotStale; do not use outside // of that function. // // LOCKS_REQUIRED(fs.mu) func (fs *fileSystem) mintInode(name string, o *gcs.Object) (in inode.Inode) { // Choose an ID. id := fs.nextInodeID fs.nextInodeID++ // Create the inode. switch { // Explicit directories case o != nil && inode.IsDirName(o.Name): in = inode.NewExplicitDirInode( id, o, fuseops.InodeAttributes{ Uid: fs.uid, Gid: fs.gid, Mode: fs.dirMode, }, fs.implicitDirs, fs.dirTypeCacheTTL, fs.bucket, fs.mtimeClock, fs.cacheClock) // Implicit directories case inode.IsDirName(name): in = inode.NewDirInode( id, name, fuseops.InodeAttributes{ Uid: fs.uid, Gid: fs.gid, Mode: fs.dirMode, }, fs.implicitDirs, fs.dirTypeCacheTTL, fs.bucket, fs.mtimeClock, fs.cacheClock) case inode.IsSymlink(o): in = inode.NewSymlinkInode( id, o, fuseops.InodeAttributes{ Uid: fs.uid, Gid: fs.gid, Mode: fs.fileMode | os.ModeSymlink, }) default: in = inode.NewFileInode( id, o, fuseops.InodeAttributes{ Uid: fs.uid, Gid: fs.gid, Mode: fs.fileMode, }, fs.bucket, fs.syncer, fs.tempDir, fs.mtimeClock) } // Place it in our map of IDs to inodes. fs.inodes[in.ID()] = in return }