HAMMER2 unable to handle ENOSPC properly
Although different from a situation in HAMMER1, HAMMER2 still can't properly handle ENOSPC.
# dd if=/path/to/something of=/path/to/hammer2/file
never ends while HAMMER2 internally recognizes ENOSPC.
The problem seems to be that HAMMER2's strategy vop uses asynchronous xop completion (while other HAMMER2's vops mostly wait for xops to complete).
To be more specific, write vop -> ... -> strategy vop -> strategy xop -> ... -> hammer2_assign_physical() -> hammer2_chain_create() hits ENOSPC (in my case when allocating indirect block), but that's never handled by the front end in vop.