First of all; your code does not have the correct indentation.
Secondly, without the mesh one cannot reproduce the error.
Thirdly, you are solving a Poisson problem. Why not use CG + Hypre (boomeramg)?
This is what is done in:
See: How to solve variational problem by iteration methods - #2 by dokken for how to setup hypre in legacy dolfin.
But note:
Testing weak scalability of parallel solver: cg + hypre_amg - #4 by dokken