The Royals had the ball in the net three times in the opening seven minutes, only to see the linesman's flag raised on each occasion.

But they kept going and got their reward in the 56th minute when Dave Kitson met an inswinging cross to find the corner of the net.

Shane Long - who had two efforts ruled out early on - finally got on the scoresheet in the 73rd minute to virtually guarantee the Royals at least a play-off berth.

Reading are six points behind Birmingham with two games to play, but have a better goal difference.

It is the same story for Cardiff, who were held to a 2-2 draw at Charlton, but can be happy with a late fightback.

The Addicks led through teenager Jonjo Shelvey in the 35th minute, and then doubled their lead when Nick Bailey found the net 10 minutes from time.

Chris Burke responded quickly for Cardiff before Gabor Gyepes snatched an equaliser at the death.

Barnsley were denied what would have been a vital away win as Coventry earned a 1-1 draw through Elliot Ward's controversial last-minute penalty.

Barnsley took the lead through Daniel Bogdanovic in the ninth minute and looked like making it stand up until Ward scored after Bobby Hassell was deemed to have handled.

In League One, relegation-threatened Northampton and play-off hopefuls Scunthorpe shared the points in a thrilling 3-3 draw.

Jason Crowe had poked the Cobblers in front in the 38th minute, but Liam Trotter equalised on the stroke of half-time and Scunthorpe led through Grant McCann's penalty early in the second half.

Ikechi Anya headed Northampton level but Matthew Sparrow's 68th minute goal restored Scunthorpe's advantage.

The Cobblers then responded again as Mark Hughes headed home 14 minutes from time.

Brighton got the win they needed to climb out of the drop zone as they came from behind to beat Bristol Rovers 2-1.

The hosts led through Ricky Lambert's 28th goal of the season but Brighton levelled two minutes before the break through Lloyd Owusu's fifth in five games.

They then completed the turnaround seven minutes after the restart with more great work from Gary Hart down the left and substitute Calvin Andrew meeting the cross at the near post.

Already-relegated Hereford were playing with the pressure off and caught Yeovil flat-footed as they took a 2-0 lead before drawing 2-2 thanks to a last-minute Chris Weale header.

Goals from Jennison Myrie-Williams and Stephen Guinan put Hereford in control but Luke Rodgers scored for Yeovil before Weale's late intervention.

League Two leaders Brentford will have to wait until the weekend to wrap up promotion after going down 3-1 at Dagenham & Redbridge.

Goals from Sam Saunders, Solomon Taiwo and Mark Arber had the Daggers in total control, and made Damian Spencer's late strike academic.

A Brentford win and a Wycombe loss would have seen the Bees go up as champions, but neither result materialised as Wycombe beat Luton 1-0.

They goal came in the 56th minute when John Akinde cut in from the right-hand side and fired the ball home.

Morecambe's play-off hopes were dealt a blow as they went down 3-2 to Rotherham.

Ryan Taylor put the Millers in front before Diarmuid O'Carroll levelled early in the second half.

The game came to life in the final 10 minutes as Jason Taylor put Rotherham in front and Mark Burchill appeared to kill it with an 89th-minute penalty.

Jim Bentley responded immediately but Rotherham hung on to win.