Make some adjustments to the buffer cache:
* Retain B_ERROR instead of clearing it.
* Change B_ERROR's behavior. It no longer causes the buffer to be
invalidated on write.
* Change B_NOCACHE's behavior. It no longer causes the buffer to be
invalidated while the buffer is marked dirty.
* Code that was supposed to re-dirty a failed write buffer in brelse()
was not running because biodone() cleared the fields brelse() was
testing. Move the code to biodone().
* When attempting to reflush B_DELWRI|B_ERROR'd buffers, sleep a tick
to try to avoid a live-lock.