code: func (fs *FS) File(inode uint32) (*File, error) {
  	g, ioff, err := fs.igroup(inode)
  	if err != nil {
  		return nil, err
  	}
  
  	addr := int64(fs.BlockSize) * int64(g.Inodeaddr+ioff/fs.inodesPerBlock)
  	ivoff := (ioff % fs.inodesPerBlock) * fs.inodeSize
  
  	file := &File{fs: fs, inum: inode}
  	if _, err := fs.read(addr, int(ivoff), &file.ino); err != nil {
  		return nil, err
  	}
  
  	switch file.ino.Mode & ifmt {
  	case ififo, ifchr, ifdir, ifblk, ifreg, iflnk, ifsock:
  		// okay
  	default:
  		return nil, fmt.Errorf("invalid inode mode %#x", file.ino.Mode)
  	}
  
  	return file, nil
  }
docs: // File returns the file with the given inode number.