zfs: Wait for txg sync if the last DRR_FREEOBJECTS might result in a hole
We ran into this: https://github.com/openzfs/zfs/pull/14358 (fix is the commit shown there).
If we receive a DRR_FREEOBJECTS as the first entry in an object range, this might end up producing a hole if the freed objects were the only existing objects in the block.
If the txg starts syncing before we've processed any following DRR_OBJECT records, this leads to a possible race where the backing arc_buf_t gets its psize set to 0 in the arc_write_ready() callback while still being referenced from a dirty record in the open txg.
To prevent this, we insert a txg_wait_synced call if the first record in the range was a DRR_FREEOBJECTS that actually resulted in one or more freed objects.
Testing done: With this patch, the system have not had panic for weeks.