If it reports a bad status, UpdateFragmentExecStatus() will call UpdateStatus(), which takes Coordinator::lock_ and then calls Cancel(). That method issues one RPC per fragment instance.
In KRPC, doing so much work from UpdateFragmentExecStatus() - which is an RPC handler - is a bad idea, even if the RPCs are issued asynchronously. There's still some serialization cost.
It's also a bad idea to do all this work while holding lock_. We should address both of these to ensure scalability of the cancellation path.