Even if we use the same code path for say MEM_ONLY, we won't actually write the data to disk since we also pass the storage level to BlockManager along with the data.

But I see your second point about possibly dropping a block before we read it. That does seem to prevent us from merging the two cases.