Match ends, Doncaster Rovers 1, Reading 3.
Two late goals from Pavel Pogrebnyak took Reading into the top six and left Doncaster in relegation danger.
The hosts deservedly led through James Coppinger's first-half shot as they looked to end a five-game winless run.
But a penalty from Adam Le Fondre after he had been tripped by Paul Quinn sparked a Reading fightback.
Pogrebnyak headed home and in stoppage time struck on the break to mean Doncaster might need a last-day win at Leicester to stay up.
Rovers defied their recent form to make a positive start and went in front when former Reading loanee Billy Sharp picked out Coppinger to steer the ball home.
Coppinger then crossed for Sharp to force Reading keeper Alex McCarthy into a near-post save.
Reading did not muster a single first-half effort on target but improved after the break as they looked to keep their promotion hopes alive.
And they equalised when Le Fondre converted his 15th goal of the season from the spot.
Le Fondre then wasted a chance to put Reading in front but with time running out Pogrebnyak struck.
The Russian striker nodded home his 12th goal of the season from a far-post Jake Taylor cross and then made the points safe as Doncaster pressed for a late leveller.
Alex Pearce's pass released Pogrebnyak to finish from close range, meaning a win in their final game of the season at home to promoted Burnley will guarantee Nigel Adkins' men a play-off place.
Reading manager Nigel Adkins:
"We weren't at our best in the first half but we had words during the interval and the response from the players was fantastic.
"There's a hunger and a passion about this side and it's in our own hands whether we are in the play-offs or not.
"We've got Burnley at home in the last match and that won't be easy but I'm expecting a full house and we will be going all out to win the game.
"We knew we had to win to keep our season alive and the players have gone out and done that."
Doncaster manager Paul Dickov:
"We were all gutted in the dressing room afterwards but we will get it out of our systems before we go again in the final match at Leicester.
"Now it's all down to the last match against my old club, who won't be doing us any favours. But I'm still confident we can avoid going down.
"There was drama at this club on the last game last season when we went up by winning at Brentford and there can be drama again at Leicester.
"Whatever happens, we'll go there and give it all we've got because we want to stay in this division - and we can't rely on other results going our way."
- 17TamasSubstituted forMcCombeat 89'minutes
- 4FurmanSubstituted forWellensat 69'minutes
- 10SharpSubstituted forRobinsonat 86'minutes
- 21De Val Fernandez
- 12McClearyBooked at 80minsSubstituted forHectorat 90+2'minutes
- 16AkpanSubstituted forTaylorat 76'minutes
- 9Le FondreSubstituted forGorkssat 90'minutes
- Anthony Taylor
- Shots on Target
Second Half ends, Doncaster Rovers 1, Reading 3.
Goal! Doncaster Rovers 1, Reading 3. Pavel Pogrebnyak (Reading) left footed shot from the left side of the box to the bottom left corner. Assisted by Alex Pearce following a fast break.
Enda Stevens (Doncaster Rovers) wins a free kick in the defensive half.
Foul by Pavel Pogrebnyak (Reading).
Substitution, Reading. Michael Hector replaces Garath McCleary.
Substitution, Reading. Kaspars Gorkss replaces Adam Le Fondre.
Substitution, Doncaster Rovers. Jamie McCombe replaces Gabriel Tamas.
Attempt missed. Pavel Pogrebnyak (Reading) right footed shot from the centre of the box is too high. Assisted by Garath McCleary.
Goal! Doncaster Rovers 1, Reading 2. Pavel Pogrebnyak (Reading) header from the left side of the six yard box to the top left corner. Assisted by Jake Taylor with a cross.
Substitution, Doncaster Rovers. Theo Robinson replaces Billy Sharp.
Attempt missed. Mikele Leigertwood (Reading) right footed shot from outside the box is just a bit too high following a set piece situation.
Foul by Gabriel Tamas (Doncaster Rovers).
Pavel Pogrebnyak (Reading) wins a free kick on the left wing.
Delay over. They are ready to continue.
Delay in match (Reading).
Attempt blocked. Garath McCleary (Reading) right footed shot from the centre of the box is blocked. Assisted by Jobi McAnuff with a cross.
Attempt missed. Adam Le Fondre (Reading) right footed shot from the centre of the box is high and wide to the right. Assisted by Garath McCleary.
Substitution, Reading. Jake Taylor replaces Hope Akpan.
Paul Quinn (Doncaster Rovers) wins a free kick in the defensive half.