block: let generic driver API work asynchronously

Fix #990