Joao Felix's superb dinked finish earned Barcelona a vital 1-0 win over Atletico Madrid on Sunday in the La Liga title race.

The Portuguese forward, on loan at Barca from Atletico, made no secret of his pleasure to escape the Spanish capital this summer and made his parent club pay at the Olympic Stadium.

Felix was criticised by some Atletico players ahead of the game and Barca coach Xavi Hernandez called on him to use those words as inspiration, which he duly did.

The forward's goal allowed Barca to reclaim third place from Atletico, now trailing leaders Real Madrid and second place Girona by four points.

"Joao Felix said that he was calm, that it was just another game for him," Barca defender Ronald Araujo told Movistar.

"He wanted to put himself out there, to score goals, to give assists, the important thing is that he is happy."

Araujo said Barcelona's squad have faith in coach Xavi Hernandez and themselves, despite the team's recent struggles.

"We know the team that we have, we believe a lot in the work we're doing with the coach," added Araujo.

"The results weren't coming but we did well in the Champions League and we knew that today we had to do it too."

Atletico have not won away against the champions in La Liga since 2006, a run now stretching to 18 matches, but arrived thinking this could be the time to snap that streak.

Since crumbling to a defeat in the Clasico by Real Madrid at the end of October, Barcelona have struggled for form and confidence.

They scraped tight wins against Real Sociedad and Alaves despite being outplayed, lost at Shakhtar Donetsk in Europe and then drew with Rayo Vallecano.

Xavi said Barca were back on track with their win over Porto earlier this week to reach the Champions League last 16 and his words were justified by a dominant first-half display.

Barcelona started well, carving out chances and Felix broke the deadlock after 28 minutes, taking a brilliant touch to ride Nahuel Molina's challenge and then dinking the ball over Atletico goalkeeper Jan Oblak.

Felix celebrated with arms aloft, standing on the advertising hoardings in front of the angry visiting supporters, while Rojiblancos coach Diego Simeone appeared disgruntled as he flashed up on the big screens.

The 24-year-old forward, a club record signing at 126 million euros ($137 million) in 2019, never settled in the capital and did not click with Simeone's management and playing style.

Payback

Perhaps not coincidentally, Axel Witsel was soon booked for hacking Felix to the ground shortly after. Koke was also cautioned for a cynical challenge on the rampaging Raphinha.

Felix came close to a second with a prodded effort from Ilkay Gundogan's cut-back, but this time Oblak denied him. 

The forward called for a penalty as Hermoso stepped on his foot after the shot but his appeals were dismissed.

Gundogan impressed in midfield alongside fit-again duo Pedri and Frenkie de Jong, as Barcelona controlled the game.

Raphinha clipped the pst at the start of the second half to get Barcelona fans out of their seats.

Despite their high-calibre opponents, the attendance fell short of 35,000 and was the club's poorest this season, with supporters perhaps chastened by the colder winter evenings and the late kick-off.

While Felix was on-target against his former side, Atletico talisman Antoine Griezmann worked hard but could not find the net against his old employers -- he has not netted in 14 games against Barca for the Rojiblancos.

Memphis Depay, another ex-Barcelona player, came closest for Atletico with a free-kick tipped over by Inaki Pena, between the sticks for the hosts in place of the hurt Marc-Andre ter Stegen.

Robert Lewandowski should have wrapped up Barcelona's victory but pulled an effort wide when running in on goal.

The veteran striker has only three goals in his last 10 games for Barca across all competitions, but on this occasion his profligacy did not cost Xavi's side.

Pena denied Angel Correa in stoppage time to ensure Atletico, fourth, trail Barca by three points and the top two by seven.

"The idea was to go for the game and I don't know what happened," Atletico goalkeeper Oblak told Movistar.

"Nobody was good in the first half, nobody wanted the ball, nobody wanted to play."