Hello @kazual82,
Lot of question here, I'll try to answer my best:
Is there a known XCP-ng 8.3, blktap, or Xen issue matching this frontend/backend state mismatch?
No, I never saw this kind of issue but I appreciate all your investigation.
Can tapdisk or the Xen backend lose a completion while both sides remain in state Connected?
It'd surprise me because my opinion is tapdisk is sending to much completion notifications. My guess is a race condition somewhere that loose the notification.
Is xen_blkfront.max_ring_page_order=3 considered safe and recommended with this backend?
Yes, it's safe but there is no recommendation on that because any max_ring_page_order should work.
Could increasing the ring size reduce the probability of this failure, or would it only mask it temporarily?
I guess it reduce the probability.
Is the fact that persistent grants and indirect descriptors are not negotiated relevant?
No, it's expected, tapdisk doesn't support those features.
Are there additional tapdisk, xenstore, event-channel, or ring diagnostics that we should enable before the next incident?
I don't see what we can do. If it appends again I'm curious to investigate. Install blktap-debuginfo and devtoolset-11-gdb to attach the debugger on tapdisk and see the state of the blkif ring, that could be an info if the requests are still in the ring. If you can open a support tunnel, I will investigate.
Are there candidate packages or patches that would be useful to test on one canary host?
The next update, yet to be release, will add a bunch of fixes for QCOW2 support in tapdisk and sm. I recommend this update.
Could the use of a multi-terabyte QCOW2 VDI on an LVM SR be relevant to this failure mode?
I fear this is a QCOW2 issue only linked to the recent release of the feature but no real clue here.
The fact that tap-ctl stats answer is the proof that there is no deadlock on the tapdisk side, that's a small reason of satisfaction.