code: func (s *storage) SubFetch(ctx context.Context, ref blob.Ref, offset, length int64) (io.ReadCloser, error) {
  	// TODO: pass ctx to more calls within this method.
  	m, err := s.getMetaRow(ref)
  	if err != nil {
  		return nil, err
  	}
  	if m.isPacked() {
  		length, err = capOffsetLength(m.size, offset, length)
  		if err != nil {
  			return nil, err
  		}
  		// get the blob from the large subfetcher
  		return s.large.SubFetch(ctx, m.largeRef, int64(m.largeOff)+offset, length)
  	}
  	if sf, ok := s.small.(blob.SubFetcher); ok {
  		rc, err := sf.SubFetch(ctx, ref, offset, length)
  		if err != blob.ErrUnimplemented {
  			return rc, err
  		}
  	}
  	rc, size, err := s.small.Fetch(ctx, ref)
  	if err != nil {
  		return rc, err
  	}
  	length, err = capOffsetLength(size, offset, length)
  	if err != nil {
  		rc.Close()
  		return nil, err
  	}
  	if offset != 0 {
  		if _, err = io.CopyN(ioutil.Discard, rc, offset); err != nil {
  			rc.Close()
  			return nil, err
  		}
  	}
  	return struct {
  		io.Reader
  		io.Closer
  	}{io.LimitReader(rc, length), rc}, nil
  }
docs: // SubFetch returns part of a blob.
  // The caller must close the returned io.ReadCloser.
  // The Reader may return fewer than 'length' bytes. Callers should
  // check. The returned error should be os.ErrNotExist if the blob
  // doesn't exist.