code: func (sto *Storage) removeOldest() bool {
  	ctx := context.TODO()
  	k, v := sto.lru.RemoveOldest()
  	if v == nil {
  		return false
  	}
  	sb := v.(blob.SizedRef)
  	// TODO: run these without sto.mu held in background
  	// goroutine? at least pass a context?
  	err := sto.cache.RemoveBlobs(ctx, []blob.Ref{sb.Ref})
  	if err != nil {
  		log.Printf("proxycache: could not remove oldest blob %v (%d bytes): %v", sb.Ref, sb.Size, err)
  		sto.lru.Add(k, v)
  		return false
  	}
  	if sto.debug {
  		log.Printf("proxycache: removed blob %v (%d bytes)", sb.Ref, sb.Size)
  	}
  	sto.cacheBytes -= int64(sb.Size)
  	return true
  }
docs: // must hold sto.mu.
  // Reports whether an item was removed.