Traits
We should regulate the behavior of this trait on FAILURE e.g. What if buf.len()>BLOCK_SZ for read_block? e.g. Does read_block clean the rest part of the block to be zero for buf.len()!=BLOCK_SZ in write_block() & read_block() e.g. What if buf.len()<BLOCK_SZ for write_block?