Vm A also does copy on write. So VM B is still seeing the unmodified block.
What if VM A is a new VM? What happens to the block after copy-on-write? Just destroyed?
So the logic is to check if VM A has a new fork. If yes, then start CoW to a new layer of blocks, and leave the current layer to be linked with VM B. If no, just don't use CoW.
I hope I got it right!