code: func (n *node) populateAttr() error {
  	meta := n.meta
  
  	n.attr.Mode = meta.FileMode()
  
  	if n.fs.IgnoreOwners {
  		n.attr.Uid = uint32(os.Getuid())
  		n.attr.Gid = uint32(os.Getgid())
  		executeBit := n.attr.Mode & 0100
  		n.attr.Mode = (n.attr.Mode ^ n.attr.Mode.Perm()) | 0400 | executeBit
  	} else {
  		n.attr.Uid = uint32(meta.MapUid())
  		n.attr.Gid = uint32(meta.MapGid())
  	}
  
  	// TODO: inode?
  
  	if mt := meta.ModTime(); !mt.IsZero() {
  		n.attr.Mtime = mt
  	} else {
  		n.attr.Mtime = n.pnodeModTime
  	}
  
  	switch meta.Type() {
  	case "file":
  		n.attr.Size = uint64(meta.PartsSize())
  		n.attr.Blocks = 0 // TODO: set?
  		n.attr.Mode |= 0400
  	case "directory":
  		n.attr.Mode |= 0500
  	case "symlink":
  		n.attr.Mode |= 0400
  	default:
  		Logger.Printf("unknown attr ss.Type %q in populateAttr", meta.Type())
  	}
  	return nil
  }
docs: // populateAttr should only be called once n.ss is known to be set and
  // non-nil