HAMMER 63/Many: IO Error handling features
This commit removes all the remaining Debugger() calls and KKASSERTs in the
I/O error path. Errors are now propagated up the call tree and properly
reported.
* Report I/O errors instead of asserting.
* Read or Write errors in the flush path disable flushing and force the mount
into read-only mode. Modified buffers are left locked in memory until
umount to provide a consistent snapshot of the state of the filesystem.
You must umount and remount to recover the filesystem. The filesystem
will automatically rollback to the last valid flush upon remounting.
* umount and umount -f are now able to unmount a HAMMER filesystem that has
catastrophic write errors (e.g. pulling the USB cable on an external
drive).