func (c *server_InodeTbl) loadInode(xp *common.Inode) { // The count at this point is guaranteed to be > 0, so the device cannot // be unmounted until the load has completed and the inode has been 'put' inum := xp.Inum - 1 info := xp.Devinfo inodes_per_block := info.Blocksize / common.V2_INODE_SIZE ioffset := inum % inodes_per_block blocknum := info.MapOffset + (inum / inodes_per_block) // Load the inode from the disk and create an in-memory version of it bp := c.bcache.GetBlock(info.Devnum, blocknum, common.INODE_BLOCK, common.NORMAL) inodeb := bp.Block.(common.InodeBlock) // We have the full block, now get the correct inode entry inode_d := &inodeb[ioffset] xp.Disk_Inode = inode_d xp.Dirty = false xp.Mounted = nil }