Mallorca's Fernando Varela celebrates after scoring the opening goal against Real Madrid.
For over an hour the title looked to have slipped from Real's grasp as they trailed to a 17th-minute strike from Mallorca's Varela, while Barca overpowered Gimnastic.
Real suffered another setback when leading scorer Ruud van Nistelrooy was forced off in the 32nd minute after appearing to pull a hamstring as he ran towards goal.