Goals either side of half-time for Yakou Meite and a Sam Baldock spot-kick were enough to earn three important points at Madejski Stadium, going above Millwall in the process.
- Meite heads Reading into the lead
- Murray Wallace levels for the Lions
- Spot-kick from Baldock gets Royals ahead again
- Second for Meite seals the three points
A firm header by Meite opened up the lead; one which was short-lived as Murray Wallace poked in a leveller.
But Sam Baldock converted a spot-kick on the stroke of half-time when Tyler Blackett was fouled, and a second header from Meite put the game beyond doubt late in the day.
There were first starts of the 2018-19 campaign for two Royals - Garath McCleary's long-awaited return finally came as he dropped straight into the starting XI, while Anssi Jaakkola began in goal owing to injuries to Vito Mannone and Sam Walker.
Former Reading defender Jake Cooper was lucky to escape the referee's notebook in the early exchanges - he cynically chopped down Yakou Meite as the Ivorian looked to build an early attack.
Jaakkola was forced into his first save just after the ten-minute mark - a neat, incisive move saw Shane Ferguson slot through the Reading defence to find Jed Wallace on the run, but a touch off the goalkeeper's foot put it behind.
His next stop was a stunner, and prevented Cooper from finding the net on his Madejski Stadium return. Ryan Leonard hung up a cross to the far post, and the Finnish stopper miraculously scampered across goal to punch off the line.
It was proving to be an attritional affair; the Reading defence were having to handle an aerial bombardment from their visitors and battle for every ball. After weathering a storm at one end, the Royals had two terrific chances to open a lead at the other.
Andy Yiadom's deflected cross fell into the path of Liam Kelly - his left-footed effort had Ben Amos stranded but struck the base of the post. Meite was denied from six yards on the follow-up, as Mahlon Romeo threw his body in the way.
For all of Millwall's aerial prowess, it was a headed effort which put Reading into the lead before the half-hour mark. It began with a surging run out of defence by captain Liam Moore, and then a peach of a delivery from Tyler Blackett - Meite stole a march on Cooper and bulleted an effort beyond the dive of Amos to put the Royals in command.
Goalie Jaakkola made another smart stop to deny Shane Ferguson from a tight angle, as the striker trapped and swivelled in the area.
But from the resulting corner, it was the Lions who won the first ball and the ball broke kindly for Murray Wallace to sweep in from inside the six-yard box. Level again.
Kelly came close to reestablishing a lead for Reading before the break; Leandro Bacuna's corner was cleared only as far as the edge of the area, where the midfielder unleashed a first-time volley. Not far wide.
But the Royals were able to get their noses back in front before the break from the penalty spot. Kelly laid off to John Swift, who in turn squared for Blackett... Romeo dived in to try and win the ball but took out the full-back. Penalty! Baldock, on spot-kick duty, lashed into the top corner decisively.
Half-time: Reading 2-1 Millwall
Early in the second half, the Royals again had to match the Lions in a physical capacity; Shane Ferguson's delivery from the right was met by Tom Elliott but the crossbar prevented the leveller. Millwall skipper Shaun Williams guided back into the danger area, Gregory flicked towards goal, but bodies were in the way.
Meite was denied a breakaway second when Amos got his angles just right. Baldock harried, won the ball on half-way, allowing Swift to dissect the visiting defence with an early ball. The angle didn't favour the forward though and the goalkeeper saved.
Cooper's overdue yellow card came just before the hour - a lunging, mistimed tackle on Swift in the centre circle prevented the Royals breaking in numbers. At the third time of asking, the referee reached for his pocket.
For the next 10 minutes, it was an air raid from Millwall - there was tussling from both teams in Reading's six-yard box, but the Royals keep it the right side of fair despite a few protestations from the Lions players and fans.
And when the ball broke to Ferguson, he blasted towards goal as the ball dropped out of the sky. Jaakkola turned it away strongly, although he needed treatment after taking a whack in the melee.
Elliott's last involvement before being subbed off was to get on the end of Ferguson's corner - he made clean contact but steered his header wide. Andy Rinomhota was introduced for the final 10 minutes for the Royals, his second league appearance of the season.
After withstanding pressure throughout, the Royals were able to enjoy a two-goal advantage when Meite grabbed his second - Reading's third - in the final five minutes. Millwall's box was sparsely populated when Bacuna stepped up to take a corner - but that meant Meite was unmarked when he arrived at the back post to head in!
It was a performance that needed to be spirited - and it was. The points weren't gifted; they were earned.
Full-time: Reading 3-1 Millwall
Reading: Jaakkola, Yiadom, Blackett, Moore (c), Ilori, Bacuna, Kelly (McNulty 84), Swift, McCleary (Gunter 74), Meite, Baldock (Rinomhota 79).
Unused subs: Legg, Meyler, Aluko, Sims.
Goals: Meite (28, 86), Baldock (45 pen).
Millwall: Amos, Meredith, Cooper, Williams, J.Wallace, Gregory, Ferguson, Romeo, Elliott (Morison 77), M.Wallace, Leonard (Bradshaw 84).
Unused subs: Archer, Hutchinson, Tunnicliffe, Skalak, O'Brien.
Goal: M.Wallace (34).
Yellow: Romeo, Cooper.
Attendance: 14,532 (1,831 away).
Referee: Mr D Webb